[关闭]
@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

toString 是一个比较常见和常用的工具方法,但是在将Number 类型转化为字符串的时候需要留意下写法,具体请看示例

    10.toString() // 报错,javascript 将`.`运算符识别成小数点

    10..toString() //正确调用方式
    (10).toString() //正确调用方式

JSON.stringify可以接收几个参数

通常情况下,很多同学只传一个参数,所以时间久了,大家就忘记了,JSON.stringify 其实可以传2个参数的

  1. JSON.stringify方法还可以接受一个数组,作为第二个参数,指定需要转成字符串的属性。
  2. 这个类似白名单的数组,只对对象的属性有效,对数组无效。
  3. 第二个参数还可以是一个函数,用来更改JSON.stringify的返回值。
  4. JSON.stringify还可以接受第三个参数,用于增加返回的 JSON字符串的可读性。如果是数字,表示每个属性前面添加的空格(最多不超过10个);如果是字符串(不超过10个字符),则该字符串会添加在每行前面。

    JSON.stringify({ p1: 1, p2: 2 },['p1'], 2);
    

同样的,JSON.prase 方法可以接收一个处理函数作为第二个参数,用法与JSON.stringify 类似

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注