需要澄清在JavaScript中何时使用引号以及何时不使用引号

需要澄清在JavaScript中何时使用引号以及何时不使用引号,javascript,Javascript,我是JavaScript新手,学习codecademy.com上的课程。最近他们引入了括号表示法(与更简单的点表示法相反)。我知道这有很多优点,因为你可以引用那些你用点符号无法引用的东西。然而,我不明白为什么在某些情况下我应该使用引号 例如: var suitcase = { shorts: "purple" }; if (suitcase.hasOwnProperty("shorts")) { console.log(suitcase.shorts); } 为什么shorts

我是JavaScript新手,学习codecademy.com上的课程。最近他们引入了括号表示法(与更简单的点表示法相反)。我知道这有很多优点,因为你可以引用那些你用点符号无法引用的东西。然而,我不明白为什么在某些情况下我应该使用引号

例如:

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

为什么shorts在if(手提箱.hasOwnProperty(“shorts”)行中需要在其周围加引号{?我习惯用引号将某个对象指定为字符串。shorts是行李箱对象的属性,因此我认为它将被引用而不带引号。到目前为止,我已经很好地理解了JavaScript的规则,但没有清楚地解释这一点,所以我发现自己很困惑。

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


hasOwnProperty
是一种正常的方法。如果您传入了
shorts
而不是
“shorts”
,JS会将
shorts
视为一个变量。

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

hasOwnProperty
是一个正常的方法。如果您传入了
shorts
而不是
“shorts”
,JS会将
shorts
视为一个变量。

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

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

请考虑以下情况:

var suitcase = {
    shorts: 'purple',
    shorts: purple
}
是的,它两次分配给“shorts”。但是第一行,即“purple”将一个值为
purple
的字符串分配给shorts对象键。第二行,分配一个名为
purple
的变量,该变量尚未定义

在Javascript中,上下文就是一切。没有必要引用
shorts
部分,因为JS解释器知道您正在定义一个对象键。但是,决定
purple
是一个表示颜色的字符串,还是一个名称恰好为
purple
的变量,还不够明智。这就是为什么会出现这样的情况tes-提供必要的上下文

hasOwnProperty的情况也一样。如果shorts没有被引用,那么它将被视为一个未定义的变量。如果它被引用,那么它就是一个字符串。

考虑一下:

var suitcase = {
    shorts: 'purple',
    shorts: purple
}
是的,它两次分配给“shorts”。但是第一行,即“purple”将一个值为
purple
的字符串分配给shorts对象键。第二行,分配一个名为
purple
的变量,该变量尚未定义

在Javascript中,上下文就是一切。没有必要引用
shorts
部分,因为JS解释器知道您正在定义一个对象键。但是,决定
purple
是一个表示颜色的字符串,还是一个名称恰好为
purple
的变量,还不够明智。这就是为什么会出现这样的情况tes-提供必要的上下文


对于
hasOwnProperty
,也是如此。如果shorts没有被引用,那么它将被视为一个未定义的变量。如果它被引用,那么它就是一个字符串。

没有引号,javascript将把shorts解释为一个对象,因为shorts是未定义的。hasOwnProperty函数正在寻找字符串类型的属性名称

ReferenceError: shorts is not defined
所以

返回“紫色”

短裤和手提箱不是同一件物品。事实上,在你申报之前,它甚至不是一件物品

shorts = "brown"
这会将短裤的值设置为“棕色”,但手提箱短裤仍为“紫色”


我希望这能澄清这一点。

没有引号,javascript将把shorts解释为一个对象,因为shorts是未定义的。hasOwnProperty函数正在寻找string类型的属性名称

ReferenceError: shorts is not defined
所以

返回“紫色”

短裤和手提箱不是同一件物品。事实上,在你申报之前,它甚至不是一件物品

shorts = "brown"
这会将短裤的值设置为“棕色”,但手提箱短裤仍为“紫色”


我希望这能澄清这一点。

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

    suitcase = new Object();  
    suitcase.shorts = 'purple';
    suitcase.hasOwnProperty('shorts');   //returns true  
始终记住,javascript中未包含在
qoutes
中的参数/参数是可变的。实际上,不仅仅是javascript,所有语言都是可变的。不要将自己与变量混淆

Javascript需要一个变量
shorts

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

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

    suitcase = new Object();  
    suitcase.shorts = 'purple';
    suitcase.hasOwnProperty('shorts');   //returns true  
始终记住,javascript中未包含在
qoutes
中的参数/参数是可变的。实际上,不仅仅是javascript,所有语言都是可变的。不要将自己与变量混淆

Javascript需要一个变量
shorts

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

当你输入一个变量时,你不会引用它,所以只有字符串和参数需要引用?我试图理解这里的基本规则。它是如何定义的?Shorts是对象下的一个参数。我想我不明白是什么使它被定义或未定义。当你输入一个变量时,你不会引用它,所以只有字符串和参数参数需要报价吗?我想了解