javascript - 奇怪的代码 - javascript (JS) 中原始变量和引用变量的动态属性

标签 javascript

我正在学习正确学习 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/

相关文章:

javascript - 当托管在硬盘驱动器上时,图像不会在浏览器中呈现 : I. E. Firefox、Safari、在 Chrome 中加载

javascript - 如何停止加载某些 javascript 文件?

javascript - 如何设置拖动元素的样式

javascript - 如何在子组件中提交时呈现数据

javascript - 使用 nodejs/npm start 在哪里查看 console.log 输出?

JavaScript 对象 : access variable property by name as string

javascript - 替换并获取单词出现次数

javascript - 具有相同 ID 的 HTML 元素

javascript - 如何更改 ExtJs Combobox 中的显示消息?

javascript - blend 2012 - 不要在后台运行整个应用程序