除了显而易见的事实,即第一种形式可以使用变量而不仅仅是字符串文字,是否有任何理由使用其中一种,如果是这样,在哪种情况下呢?
在代码中:
// Given:
var foo = {'bar': 'baz'};
// Then
var x = foo['bar'];
// vs.
var x = foo.bar;
Run Code Online (Sandbox Code Playgroud)
上下文:我编写了一个生成这些表达式的代码生成器,我想知道哪个更好.
我正在开发一个应用程序,从 OpenWeatherMaps API 获取天气信息,然后使用 FlotJS 将其绘制在图表上。
数据来自:
http://api.openweathermap.org/data/2.5/forecast?lat=39.77476949&lon=-100.1953125
其中纬度、经度是动态生成的。您可以访问该链接以了解发回的 JSON 响应类型。
我尝试首先构建数组,以便在绘制图形时将它们传递到数据对象中,如下所示:
var temp = [];
var humidity = [];
var rain = [];
$.each(response.list, function(i, item){
if(moment(item.dt, 'X').isSame(moment(), 'day')){
temp.push([moment(item.dt, 'X').valueOf(), parseFloat(item.main.temp)]);
humidity.push([moment(item.dt, 'X').valueOf(), parseFloat(item.main.humidity)]);
rain.push([moment(item.dt, 'X').valueOf(), parseFloat(item.rain.3h)]);
}
});
Run Code Online (Sandbox Code Playgroud)
temp并且humidity工作正常。我无法添加降水量。降水量值位于rain对象中3h,当我尝试将其推入数组时,出现控制台错误:
语法错误:标识符在数字文字之后立即开始
如何解决这个问题?
为什么不能用点表示法访问数组元素?
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)
换句话说,为什么语言设计师选择禁止以数字开头的标识符?
它将是类似数组的对象,但为什么我们不能用点表示法而不是括号表示法来访问它?
function testArray (rat){
return typeof arguments;
}
console.log(testArray("test")); // object
function testArray (rat){
return arguments.0; //[0] is work
}
console.log(testArray("test")); // error
Run Code Online (Sandbox Code Playgroud)