您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
不为熟知的ES5 api(一)
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
不为熟知的ES5 api(一)
京东云官网研发团队
2021-01-22
IP归属:未知
119960浏览
前端
Js
计算机编程
ES5出现好多年了,几乎已经没有了兼容问题,兼容ES2015+的方式也是转成ES5。所以es2015+可以部分学习,但ES5必须全部掌握。最近梳理了一下ES5中可能不被开发者熟悉的一些知识点,查缺补漏,有时能帮助我们写出更好的代码。 ## 1. escape、encodeURI、encodeURIComponent encodeURI、decodeURI和encodeURIComponent、decodeURIComponent使用UTF-8字符集进行编解码 * 当处理数据的时候,使用escape、unescape(已经废弃) * 当处理url的参数的时候,使用encodeURIComponent、decodeURIComponent * 当处理整个url,并且url还要后续使用的时候,使用encodeURI、decodeURI ## 2. isPrototypeOf、getPrototypeOf ##### isPrototypeOf 对象的isPrototypeOf方法相当于instanceof关键字,当调用一个构造函数创建一个新实例后,该实例的内部将包含一个指针,指向这个构造函数的原型对象。ECMA-262第5版中管这个指针叫[[Prototype]]。 在所有实现中,是无法访问到[[Prototype]]的,这里就可以使用isPrototypeOf()方法来确定对象与构造函数的原型对象之间是否有这个指针存在。 ``` function Person(name, age) { this.name = name; this.age = age; } Person.prototype = { constructor: Person, type: '人', sayHi: function () { alert('hi'); } } function Cat(name,color) { this.name = name; this.color = color; } Cat.prototype = { constructor: Cat, type: '猫', sayHi: function () { alert('喵'); } } var person = new Person('tom', 24); var cat = new Cat('小灰', 'gray'); console.log(Person.prototype.isPrototypeOf(person)); // true console.log(Cat.prototype.isPrototypeOf(cat)); // true console.log(Person.prototype.isPrototypeOf(cat)); // false console.log(Cat.prototype.isPrototypeOf(person)); // false ``` ##### getPrototypeOf ECMAScript 5 新增的一个方法,这个方法返回 [[Prototype]]的值,也就是对应的构造的函数的原型对象。 ``` function Person(name, age) { this.name = name; this.age = age; } Person.prototype = { constructor: Cat, type: '人', sayHi: function () { alert('hi'); } } function Cat(name,color) { this.name = name; this.color = color; } Cat.prototype = { constructor: Cat, type: '猫', sayHi: function () { alert('喵'); } } var person = new Person('tom', 24); var cat = new Cat('小灰', 'gray'); console.log(Object.getPrototypeOf(person) == Person.prototype); // true console.log(Object.getPrototypeOf(cat) == Cat.prototype); // true console.log(Object.getPrototypeOf(person) == Cat.prototype); // false console.log(Object.getPrototypeOf(cat) == Person.prototype); // false ``` 对象的原型是通过<font color=red>-proto-</font>来串联的,但是这个属性是隐藏属性,最好不要直接访问,而是通过<font color=red>Object.getPrototypeOf(obj)</font> 来获取原型对象 ## 3. Object.preventExtensions、Object.seal、Object.freeze * Object.preventExtensions是禁止给对象添加属性 * Object.seal是禁止给对象添加属性,并且也不能删除已有的属性 * Object.freeze是禁止给对象添加属性,并且也不能删除已有的属性,并且也不能修改属性的值 也有相应的api来判断对象是哪种种状态<font color=red > Object.isExtensible、Object.isSealed、Object.isFrozen</font>。 ## 4. String.prototype.indexOf ``` indexOf(searchString: string, position?: number): number; ``` String对象的indexOf方法有第二个参数,可以指定从什么地方开始搜索,有时候能用到这个参数,比如实现split函数: ``` function split(str, seperator) { const res = []; let findIndex = -1; let preIndex = 0; while((findIndex = str.indexOf(seperator, findIndex + 1)) !== -1) { res.push(str.slice(preIndex, findIndex)) preIndex = findIndex + 1; } return res; } split("aaaaabccccbddd", "b") //[ "aaaaa", "cccc", "ddd" ] ```
原创文章,需联系作者,授权转载
上一篇:不为熟知的ES5 api ( 三 )
下一篇:使用书签实现所有图片一键下载
相关文章
前端十年回顾 | 漫画前端的前世今生
Taro小程序跨端开发入门实战
【技术干货】企业级扫描平台EOS关于JS扫描落地与实践!
京东云官网研发团队
文章数
10
阅读量
64036
作者其他文章
01
使用书签实现所有图片一键下载
从操作上说,是将JavaScript脚本作为书签,本文主旨是在讲使用的时候点一下收藏栏中对应的书签,即可执行所有图片下载功能;
01
不为熟知的ES5 api(一)
最近梳理了一下ES5中可能不被开发者熟悉的一些知识点,查缺补漏,有时能帮助我们写出更好的代码。
01
不为熟知的ES5 api(二)
继续讲解不为熟知的ES5 api
01
不为熟知的ES5 api ( 三 )
继续讲解不为熟知的ES5 api
最新回复
丨
点赞排行
共0条评论
京东云官网研发团队
文章数
10
阅读量
64036
作者其他文章
01
使用书签实现所有图片一键下载
01
不为熟知的ES5 api(二)
01
不为熟知的ES5 api ( 三 )
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号