我不明白为什么Mozilla在使用VARIABLE关键字定义时会将其称为数组'Literal'并且可以完全更改...
var coffees = ["French Roast", "Colombian", "Kona"];
任何人都可以向我解释这个吗?
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Object_literals
答案 0 :(得分:4)
你的文字和常数令人困惑。
常量不会改变,但文字只是意味着您明确地将数组值设置为整体。
换句话说,您正在定义字面想要数组值的内容。文字本身(在右侧)是常量,但是您将它分配给变量。以同样的方式,您可以将常量的值赋给变量。
几乎每种数据类型都有文字。
var myNumber = 42; // Number literal
var myString = "Thanks for all the fish"; // String literal
var myObject = { dolphins: 1, humans: 2 }; // Object literal
答案 1 :(得分:3)
这是一个文字,因为您使用方括号var arr = [];
初始化数组而不是使用var arr = new Array();
{}
是对象的文字
文字是对构造函数的反对,只是一种方便的语言构造。
如果你谷歌“文字与构造者”,你会发现很多关于这个主题的网页:)
您还可以在此处阅读有关js文字的更多信息:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Literals
答案 2 :(得分:1)
术语“文字”只意味着“这里是阵列,就在这里,整个事物”。创建相同数组的非文字方法可以是:
var coffees = new Array();
coffees.push("French Roast");
coffees.push("Colombian");
coffees.push("Kona");
答案 3 :(得分:1)
写入的literal value ["French Roast", "Colombian", "Kona"]
实际上无法更改 - 它是一个包含三个字符串的数组,而不是其他内容。一旦文字存储在变量中,变量的值就会改变,因此变量是非文字的。
您甚至可以动态更改文字所代表的结构的值,例如[1,2,3].push(4)
,但即便如此,[1,2,3]
的书面值也是文字,指的是具有这三个元素的数组。
这就像使用数字文字一样,例如,在a = 1 + 2
中,表达式1
和2
是不可更改的文字,但它们可以结合起来产生新的结果(显然是a
可以改变。)
答案 4 :(得分:1)
术语数组文字的主要原因是使用[]
文字或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%可预测的。