我不明白为什么 Mozilla 在使用 VARIABLE 关键字定义它时将其称为数组“文字”,并且可以完全更改...
var coffees = ["French Roast", "Colombian", "Kona"];
谁能给我解释一下?
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Object_literals
我不明白为什么 Mozilla 在使用 VARIABLE 关键字定义它时将其称为数组“文字”,并且可以完全更改...
var coffees = ["French Roast", "Colombian", "Kona"];
谁能给我解释一下?
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Object_literals
您混淆了文字和常量。
常量不会改变,但文字只是意味着您将数组值作为一个整体显式设置。
换句话说,您正在定义您真正想要的数组值。文字本身(右侧)是常量,但您将其分配给变量。以同样的方式,您可以将常量的值分配给变量。
几乎每种数据类型都有文字。
var myNumber = 42; // Number literal
var myString = "Thanks for all the fish"; // String literal
var myObject = { dolphins: 1, humans: 2 }; // Object literal
这是一个文字,因为您使用方括号var arr = [];
来初始化数组,而不是使用var arr = new Array();
这与{}
对象的文字方式相同
文字是构造函数的对立面,只是一种方便的语言构造。
如果你在谷歌上搜索“literals vs constructors”,你会发现很多关于这个主题的页面:)
您还可以在此处阅读有关 js 文字的更多信息:https ://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Literals
术语“文字”只是意味着“这里是数组,就在这里,整个事情”。创建相同数组的非文字方式可能是:
var coffees = new Array();
coffees.push("French Roast");
coffees.push("Colombian");
coffees.push("Kona");
写入的文字值 ["French Roast", "Colombian", "Kona"]
实际上无法更改——它是一个包含这三个字符串的数组,仅此而已。一旦文字存储在变量中,变量的值就可以改变,因此该变量是非文字的。
您甚至可以即时更改由字面量表示的结构的值,例如 ,[1,2,3].push(4)
但即便如此,写入的值也是[1,2,3]
一个字面量,它引用具有这三个元素的数组。
这很像使用数字文字,例如,在a = 1 + 2
表达式中1
和2
是不可更改的文字,但它们可以组合起来产生新的结果(显然 的值a
可以改变)。
术语数组字面量出现的主要原因是使用[]
字面量或Array()
构造函数创建数组并不能保证始终产生相同的结果。这是因为Array()
构造函数可以被脚本改变甚至替换。考虑这个例子:
Array = function() {
var n = 0;
for (var i=0, l=arguments.length; i<l; i++) {
n += arguments[i];
}
return n;
}
var myArray = Array(1,2,3); // myArray type is number, value 6, probably not what you'd want
相对
var myArray = [1,2,3]; // myArray type is object, value [1,2,3], probably what you'd want
所以除了字面语法更简洁之外,它也是 100% 可预测的。