除了显而易见的事实,即第一种形式可以使用变量而不仅仅是字符串文字,是否有任何理由使用其中一种,如果是这样,在哪种情况下呢?
在代码中:
// Given:
var foo = {'bar': 'baz'};
// Then
var x = foo['bar'];
// vs.
var x = foo.bar;
Run Code Online (Sandbox Code Playgroud)
上下文:我编写了一个生成这些表达式的代码生成器,我想知道哪个更好.
var myObj = {"suppliers":[{"name":"supplier1","12m":"0.08","24m":"0.06"}]};
alert(myObj.suppliers[0].12m);
Run Code Online (Sandbox Code Playgroud)
是否有不同的方法来获取此属性,或者我应该不使用以数字开头的键?
我在mozilla文档中看到了这个例子,但我不明白为什么.
如果0是树的属性,我期待它trees.0会返回redwood但是是错误的声明.是a[0]一种访问数组的0属性的方法吗?在这种情况下a["length"]也应该工作(逻辑上).任何人都可以说清楚吗?
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees; // returns true
3 in trees; // returns true
6 in trees; // returns false
Run Code Online (Sandbox Code Playgroud) 此代码将警告对象a中的所有属性名称.0,1,2和你好.
Object.prototype.hello = {};
var a = [1,2,3];
for ( var number in a ) {
alert( number)
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我可以通过以下语法访问属性hello:
a.hello
Run Code Online (Sandbox Code Playgroud)
但是为什么我不能访问a.0哪个应该等于1.数组是否会创建"真实属性"?
我知道我可以通过[0]和["你好"]访问属性
为什么不能用点表示法访问数组元素?
var arr = ['Apple', 'Mango', 'Pineapple', 'Orange', {name: 'Banana', color: 'yellow'}];
console.log( arr[0] ); // "Apple"
console.log( arr.0 ); // "Apple"
console.log( arr.3 ); // "Orange"
console.log( arr[4].name ); // "Banana"
console.log( arr.4.color ); // "Color"
Run Code Online (Sandbox Code Playgroud)
换句话说,为什么语言设计师选择禁止以数字开头的标识符?