【问题标题】:difference between dot notation and bracket notation in javascript [duplicate]javascript中点表示法和括号表示法之间的区别[重复]
【发布时间】:2014-01-11 06:31:14
【问题描述】:

我试图理解.Notation[] 符号之间的区别。在下面的问题中,当我使用if (object[key] === true) 时,我得到了正确的答案。当我使用if (object.key === true) 时,它不起作用。有人可以解释为什么它不同。

var myObj = {
    one: false,
    two: false,
    three: false,
    four: true,
    five: false,
    six: false
};
var myFunc = function (object) {
    for (var key in object) {
        if (object[key] === true) {
            return "There is a true value in this object";
        } else {

        }
    }
    return "Sorry, there are no true values in this object";
};

【问题讨论】:

  • 永远不要将变量命名为object
  • 在点表示法中,您按名称访问键,在括号表示法中按字符串访问键。后者可以是动态的。
  • @thefourtheye,为什么不应该将变量命名为对象?谢谢。
  • @jstone 有一个内置的 JavaScript 对象名为Object,所以即使大小写不同,最好不要将变量命名为同名。

标签: javascript syntax brackets


【解决方案1】:

当您使用点表示法时,key 表示对象中的实际属性,它不会存在。所以,undefined 被返回,它不等于true

当您使用[] 表示法时,您正在使用变量key 中的名称访问对象中的属性。所以,这会奏效。

例如,

var myObj = {
    myVar : 1
};

for (var key in myObj) {
    console.log(key);
    console.log(myObj.key);
    console.log(myObj[key]);
}

这将打印出来,

myVar
undefined
1

因为,myObj 没有名为 key 的成员(myObj.key 尝试获取名为 key 的成员),在下一种情况下,myObj 有一个名为 myVar 的成员(@987654335 @ 尝试获取值在key 中的成员。

点符号

jslint prefers dot notation.

[] 表示法

这提供了灵活性。您可以使用变量动态访问成员。

【讨论】:

    【解决方案2】:

    点表示法写起来更快,读起来更清晰。

    方括号表示法允许访问包含特殊字符的属性并使用变量选择属性。

    <form id="myForm">
    <div><label>
    <input type="checkbox" name="foo[]" value="1"> 1
    </label></div>
    <div><label>
    <input type="checkbox" name="foo[]" value="2"> 2
    </label></div>
    <div><label>
    <input type="checkbox" name="foo[]" value="3"> 3
    </label></div>
    </form>
    

    错误示例:

    var inputs = myForm.foo[];
    

    另一方面,方括号表示法允许:

    var inputs = myForm["foo[]"];
    

    由于方括号是字符串的一部分,因此它们的特殊含义不适用。方括号表示法的第二个优点是在处理变量属性名称时。

    for (var i = 0; i < 10; i++) {
    doSomething(myForm["myControlNumber" + i]);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多