1

我是从 codecademy.com 学习 JavaScript 的新手。最近他们引入了括号表示法(与更简单的点表示法相反)。我知道有一些优势,因为您可以引用使用点符号无法引用的内容。但是我不明白为什么我应该在某些情况下使用引号。

例如:

var suitcase = {
    shorts: "purple"
};
if (suitcase.hasOwnProperty("shorts")) {
    console.log(suitcase.shorts);
}

为什么短裤需要在行中加上引号if (suitcase.hasOwnProperty("shorts")) {?我习惯于引用将某些东西指定为字符串。shorts 是手提箱对象的一个​​属性,所以我认为它会在没有引号的情况下被引用。到目前为止,我已经很好地理解了 JavaScript 的规则,但这并没有得到清楚的解释,所以我发现自己很困惑。

4

5 回答 5

2

考虑一下:

var suitcase = {
    shorts: 'purple',
    shorts: purple
}

是的,它两次分配给“短裤”。但第一行'purple'是分配一个字符串,其值为purpleshorts 对象键。第二行是分配一个名为 VARIABLE 的变量purple,该变量尚未定义。

上下文就是 Javascript 中的一切。无需引用该shorts部分,因为 JS 解释器知道您在那里定义了一个对象键。但它不够聪明地决定是否purple应该是一个表示颜色的字符串,还是一个名称恰好是purple. 这就是为什么有引号 - 提供必要的上下文。

同上hasOwnProperty。如果 shorts 没有被引用,那么它被视为一个未定义的变量。如果它被引用,那么它是一个字符串。

于 2012-04-30T04:27:10.423 回答
1

所有对象的属性名称都只是字符串。您始终可以通过字符串名称来引用属性,例如a["b"]. 一个例外是当您使用.. 在这种情况下,a.b是一个属性。这相当于a["b"]。在所有其他情况下,使用字符串来引用属性名称。

hasOwnProperty是一种正常的方法。如果您传入shorts而不是"shorts",JS 将被shorts视为变量。

于 2012-04-30T04:24:57.010 回答
1

您的示例与以下内容相同:

    suitcase = new Object();  
    suitcase.shorts = 'purple';
    suitcase.hasOwnProperty('shorts');   //returns true  

永远记住,javascript中未包含的参数/参数qoutes是可变的。实际上不仅仅是javascript,所有语言。不要将自己与变量混淆。

Javascript 需要一个变量shorts

    var shorts = 'shorts';
    suitcase.hasOwnProperty(shorts);   //returns true

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

于 2012-04-30T05:28:18.717 回答
0

hasOwnProperty()函数需要您要检查的属性的名称。因此,它需要作为字符串传入。如果您省略引号,则 javascript 将假定您正在传递一个包含属性名称的变量。

于 2012-04-30T04:25:37.653 回答
0

如果没有引号,javascript 会将 shorts 解释为一个对象,并且由于 shorts 是未定义的,所以你会得到。hasOwnProperty 函数正在寻找字符串类型的属性名称。

ReferenceError: shorts is not defined

所以

suitcase.shorts

返回“紫色”

shorts !== suitcase.shorts

shorts 与 suitcase.shorts 不是同一个对象,事实上在你声明它之前它甚至不是一个对象。

shorts = "brown"

这将 shorts 的值设置为“brown”,但 suitcase.shorts 仍然是“purple”

我希望这可以解决这个问题。

于 2012-04-30T04:29:19.717 回答