0

我不明白为什么 Mozilla 在使用 VARIABLE 关键字定义它时将其称为数组“文字”,并且可以完全更改...

var coffees = ["French Roast", "Colombian", "Kona"];

谁能给我解释一下?

https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Object_literals

4

5 回答 5

4

您混淆了文字和常量。

常量不会改变,但文字只是意味着您将数组值作为一个整体显式设置。

换句话说,您正在定义您真正想要的数组值。文字本身(右侧)是常量,但您将其分配给变量。以同样的方式,您可以将常量的值分配给变量。

几乎每种数据类型都有文字。

var myNumber = 42;                         // Number literal
var myString = "Thanks for all the fish";  // String literal
var myObject = { dolphins: 1, humans: 2 }; // Object literal
于 2012-05-04T22:11:37.467 回答
3

这是一个文字,因为您使用方括号var arr = [];来初始化数组,而不是使用var arr = new Array();

这与{}对象的文字方式相同

文字是构造函数的对立面,只是一种方便的语言构造。

如果你在谷歌上搜索“literals vs constructors”,你会发现很多关于这个主题的页面:)

您还可以在此处阅读有关 js 文字的更多信息:https ://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Literals

于 2012-05-04T22:12:53.300 回答
1

术语“文字”只是意味着“这里是数组,就在这里,整个事情”。创建相同数组的非文字方式可能是:

var coffees = new Array();
coffees.push("French Roast");
coffees.push("Colombian");
coffees.push("Kona");
于 2012-05-04T22:11:23.313 回答
1

写入的文字值 ["French Roast", "Colombian", "Kona"]实际上无法更改——它是一个包含这三个字符串的数组,仅此而已。一旦文字存储在变量中,变量的值就可以改变,因此该变量是非文字的。

您甚至可以即时更改由字面量表示的结构的值,例如 ,[1,2,3].push(4)但即便如此,写入的值也是[1,2,3]一个字面量,它引用具有这三个元素的数组。

这很像使用数字文字,例如,在a = 1 + 2表达式中12是不可更改的文字,但它们可以组合起来产生新的结果(显然 的值a可以改变)。

于 2012-05-04T22:14:16.967 回答
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% 可预测的。

于 2012-05-04T23:25:37.007 回答