将字符串常量取消作为对象属性

时间:2015-10-02 01:36:34

标签: javascript string constants

有人可以解释一下Crockford在谈到字符串常量时的意思:

  

"当下标是合法标识符形式的字符串常量时,可以使用点表示法。"

http://javascript.crockford.com/survey.html

AFAIK他将常量称为对象属性,但是如果它们的值可能随时改变,为什么要调用常量。

或者,他是否将这些作为常量引用,因为一旦定义了属性名称,它就永远不会改变?

如果我应该根据他的话做一个伪代码,我会做这样的事情(请注意,这段代码只是为了澄清我的想法,它实际上并不是javascript代码,尽管它是相同的):

const const1 = 'name';
object person = {name = 'Ed'};
print person.const1 //it should print "Ed"

非常感谢你

5 个答案:

答案 0 :(得分:1)

  

"当下标是字符串常量时,可以使用点表示法   以合法标识符的形式。"

这意味着在未更改的意义上,常量的字符串值可用于读取和写入相同的属性值。消息是虽然任何字符串值都可以在括号表示法中使用,但它必须是使用点表示法编写的合法标识符。

例如,someObject["propertyName"]表示使用点表示法与someObject.propertyName相同。两者都有效且有效。但是,虽然someObject["too....many...dots"]有效且使用括号表示法,但someObject.too....many...dots不是合法的标识符,并且不起作用。

<小时/> 回复评论:

  1. 考虑&#34;常量字符串&#34;作为程序员用来访问属性值的名称:它在编写时是固定的,并且在代码运行时不会更改。

  2. 使用点表示法的属性名称不使用引号。 object."property"始终是非法的。

  3. 对象属性名称和变量名称可以具有相同的名称​​但不要引用相同的内容

    x;      // look for variable x in function scope.
    obj.x;  // look for property x of object obj
    var x = obj.x; // transfer the value of obj.x to variable x
    
  4. 括号表示法中的属性名称是括号内的字符串值。如果这是一个字符串文字,它将被引用。如果它不是字符串文字,它将被评估为javascript表达式,结果用作属性名称。

    obj.color = "red";
    var prop = "color"
    obj[ prop]; // value of property specified by the expression (prop) is "red"
    

答案 1 :(得分:1)

Crockford在这里通俗地使用“常量”这个词。他只是指“一个特定的固定字符序列”。这与ES6 const字符串完全不同,尽管被称为const,它仍然是一个(不可变的)变量,当然,它与其他任何字符串一样持有一个密钥的变量,可以在person[const]中使用。请记住,当Crockford写这个时,JavaScript甚至没有const变量typej,显然这不是他所指的。

答案 2 :(得分:1)

JavaScript中的字符串是原始的不可变值,这就是他使用单词constant的原因,他说的是当属性标识符是合法(字)字符串值时,你可以在对象上使用点表示法。

你只是混合了两个不同的概念。

来自@Traktor53的例子是解释Crockford意味着什么的好方法。

答案 3 :(得分:0)

  • object.hello好的。
  • object.2失败,因为2不是有效的标识符。
  • object.hello world因空间而失败,
  • object.a-b你怎么看?

答案 4 :(得分:0)

这就是我所相信的

var obj = {'You can have spaces here' : 'value 1', cantHaveSpacesHere: 'value 2'};
console.log(obj['You can have spaces here']);
console.log(obj.cantHaveSpacesHere);