我是 Javascript 的新手。在阅读JS中不变性的概念时,我遇到了以下代码片段:
var obj = {field: 'value'};
function changeObject(input){
input.someOtherField = 'some other value';
}
changeObject(obj);
console.log(obj.someOtherField); //prints 'some other value'
console.log(obj.field);//prints 'value'
我无法弄清楚所谓的领域如何someOtherField
在obj
来到的存在!通常解释器应该抛出一个语法错误,但它没有。有人可以解释一下为什么吗?
我无法弄清楚 obj 中所谓的 someOtherField 字段是如何存在的!
因为这就是 JavaScript 的定义方式。您不必提前声明属性(尽管现在可以在class
构造中),您可以通过赋值来创建它们。
有些语言比较死板,你必须提前告诉他们物体的形状。JavaScript 不是。
通常解释器应该抛出一个语法错误,但它没有。
不是在 JavaScript 中。您的代码中没有语法错误。(即使在结构更严格的语言中,我也不希望它是语法错误。错误,是的,但不是语法错误。)
在您问过的评论中:
如果他拼错了字段的名称,这不会误导开发人员吗?
是的,这有时是个问题。它通常通过某种 linting 或预处理阶段来解决。目前最流行的是TypeScript:它在 JavaScript 之上覆盖了一个严格的类型系统,并针对您描述的那种情况引发错误。这是一种非常聪明和灵活的语言。如果你想对 JavaScript 进行严格的输入,我会使用它。(事实上,这是我做的使用,在这里我要严格类型的情况。)(打字稿是不是在镇上唯一的游戏,不过,也有流量,我没有用它。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句