@Belinda
2018-03-19T08:34:29.000000Z
字数 1329
阅读 719
容易被忽视的javascript细节
知识点1: Object.keys方法只返回可枚举的属性,Object.getOwnPropertyNames方法还返回不可枚举的属性名
在 Object
对象中,getOwnPropertyNames()
方法和 keys()
方法都是返回对象自身所有属性名的方法,我们常用的调用方式通常是这样
var obj = {
p1: 123,
p2: 456
};
Object.keys(obj).length // 2
Object.getOwnPropertyNames(obj).length // 2
咋一看,两个函数并没有区别遍历出来的属性个数都是2,但是通常被我们忽略掉的是,**** 在线面的调用方式里,你就能看到区别
var a = ['Hello', 'World'];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"] // length 是不可枚举属性
包装对象,JavaScript 引擎自动将其转为包装对象,在这个对象上调用length属性。调用结束后,这个临时对象就会被销毁。这就叫原始类型与实例对象的自动转换。
var s= 'abc'
s.p = 123
s.p //undefined
Boolean,Number,String 三类原始对象的构造函数能够创建其对应的包装对象,即这些函数调用时前面使用new
和不使用new
所得到的结果是不一样的
var a = new Boolean(false) //返回一个包装对象
var b = Boolean(false) //返回一个布尔类型
!!new Boolean(false) //true
!!Boolean(false) //false
在离职中我们得到了完全相反的结果,双!
运算符做了类型转换,对象被转为 true
,因此得到的结果会不一样,使用的时候需要小心
toString 是一个比较常见和常用的工具方法,但是在将
Number
类型转化为字符串的时候需要留意下写法,具体请看示例
10.toString() // 报错,javascript 将`.`运算符识别成小数点
10..toString() //正确调用方式
(10).toString() //正确调用方式
通常情况下,很多同学只传一个参数,所以时间久了,大家就忘记了,
JSON.stringify
其实可以传2个参数的
JSON.stringify
方法还可以接受一个数组,作为第二个参数,指定需要转成字符串的属性。JSON.stringify
的返回值。JSON.stringify
还可以接受第三个参数,用于增加返回的 JSON
字符串的可读性。如果是数字,表示每个属性前面添加的空格(最多不超过10个);如果是字符串(不超过10个字符),则该字符串会添加在每行前面。
JSON.stringify({ p1: 1, p2: 2 },['p1'], 2);
同样的,JSON.prase
方法可以接收一个处理函数作为第二个参数,用法与JSON.stringify
类似