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"}