我正在学习正确学习 Javascript,并且正在阅读 Web 开发人员专业 Javascript 的第 4 章。 86 他们说
Primitive values can’t have properties added to them even though attempting to do so won’t cause an error. Here’s an example:
var name = “Nicholas”; name.age = 27; alert(name.age); //undefined
他们还说 JavaScript 不像其他语言那样将字符串视为对象。我想看看是否可以打印出 name.age
。
我试过了
var name = "Nicholas";
name.age = 27, alert(name.age);
并得到未定义。
尝试
var name = "Nicholas";
name.age = 27 & alert(name.age);
还给了undefined。
但是,
var name = "Nicholas";
alert(name.age = 27);
给出 27!
关于文本的原始示例,作者说
"Here a property called age is defined on the string name and assigned a value of 27. On the very next line, however, the property is gone. Only reference values can have properties defined dynamically for later use."
- 逗号分隔的赋值和函数调用是怎么回事 - 我知道你可以使用逗号分隔变量赋值,但你也可以进行函数调用? javascript 中逗号的限制是什么?
&
运算符如何将代码片段链接在一起?该运算符是什么,它应该用于什么?- 为什么我的最后一个示例有效而其他示例却无效?这与范围有关吗?
编辑:感谢 JLRishe 和 SirReal。在阅读 SirReal 之前,我并没有真正理解 JLRishe 的回答,但我建议您同时阅读两者!
最佳答案
实际上,您所有三个问题的答案都与 、
、&
和 =
运算符的定义方式有关,并且与原始值的属性无关。
What is going on with the comma separated assignment and function call
您的第二个示例是 comma operator 的示例, 这与变量声明中使用的逗号不同。它从左到右一次计算每个操作数,表达式的最终值是最后一个操作数的值。
How does the & operator work for chaining together code snippets?
&
运算符从左到右评估它的两个操作数,并产生对它们应用按位 AND
的结果。您的 alert()
作为其副作用 正在执行。表达式 27 & alert(name.age)
的计算结果为 0
,这是分配给 name.age
的内容(但这不是真的什么都不做)。您可以看到类似的行为:
name.age = 27 * alert(name.age);
或
name.age = 27 - alert(name.age);
或其他几个运营商。
Why did my last example work when the other ones wouldn't?
您在上一个示例中观察到的是 =
运算符的定义明确的行为。它执行赋值并产生右侧的值。由于您引用的原因,在这种情况下实际上并没有发生赋值,但它仍然计算出右侧的值,这就是传递给 alert()
函数的值。
关于javascript - 奇怪的代码 - javascript (JS) 中原始变量和引用变量的动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371046/