重新学习属性存取

230 阅读1分钟

js 中,「一切皆对象」,有对象,就要考虑其属性的存取。

对象的属性的值,可以是一个指向 Function 实例的引用。指向 Function 实例的引用的属性和一个普通的属性并没有多么大的区别,方法不过是可以被调用的属性而已。

Js 中有两种方式用于访问一个对象的属性:.[]

语法:

    object.property
    object[‘property’]

使用 . 的时候,property 必须是一个有效的 javascript 标识符,例如,一串字母数字字符,可以包括下划线和 $ ,不过不能以数字开头。

使用 . 需要注意

可以通过数字与方法之间添加空格、回车、. 、圆括号,或者把数字改为浮点数等方式来调用方法,防止 . 被解释为小数点。

    666 .toExponential()
    // > "6.66e+2"
    
    666
    .toExponential()
    // > "6.66e+2"
    
    (666).toExponential()
    // > "6.66e+2"
    
    666..toExponential()
    // > "6.66e+2"
    
    66.0.toExponential()
    // > "6.6e+1"

使用 [] 需要注意

使用 [] 存取属性时, property 不一定是一个合法的标识符,它可以是任意值,比如数字开头,甚至是一个空格。 [] 之前允许有空格:

    document ['createElement']('pre’)
    <pre>​</pre>​
    // 等同于
    document.createElement('pre')
    <pre>​</pre>​

属性名称必须是字符串或者 Symbol ,也就是说非字符串对象不能用来作为一个属性的名称。任何非字符串对象,都会通过 toString 方法,被转换成一个字符串。

    var object = {};
    object['1'] = 'value';
    console.log(object[1]); // > value
    
    var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
    object[foo] = 'value';
    // {unique_prop: 2} 和 {unique_prop: 1} 都被转化为 [object Object]
    console.log(object[bar]); // >  value
    console.log(object) // > {[object Object]: "value"}