Javascript 不存在的对象字段不会引发语法错误

Javascript 不存在的对象字段不会引发语法错误,javascript,Javascript,我对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);

我对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'
我无法理解
obj
中所谓的字段
someOtherField
是如何出现的!通常,解释器应该抛出语法错误,但它没有抛出。有人能解释一下为什么吗

我无法理解obj中所谓的其他领域是如何存在的

因为JavaScript就是这样定义的。您不必事先声明属性(尽管现在可以在
class
constructs中声明),您可以通过赋值创建属性

有些语言比较死板,你必须事先告诉他们物体的形状。JavaScript不是

通常,解释器应该抛出语法错误,但它没有抛出

不是用JavaScript。代码中没有语法错误。(即使在结构更为严格的语言中,我也不认为这是语法错误。是的,这是一个错误,但不是语法错误。)


在您询问的评论中:


如果开发人员将字段名称拼写错误,这不会误导他吗

是的,这有时是个问题。它通常是通过某种脱毛或预处理阶段来解决的。目前最流行的一种是:它在JavaScript之上覆盖了一个严格的类型系统,并针对您所描述的情况引发错误。这是一种非常聪明和灵活的语言。如果你想对JavaScript进行严格的输入,我会使用它。(事实上,在我需要严格打字的情况下,我确实会使用它。)(不过,TypeScript并不是镇上唯一的游戏,也有。我没有使用过它。)

我无法理解obj中所谓的其他领域是如何存在的

因为JavaScript就是这样定义的。您不必事先声明属性(尽管现在可以在
class
constructs中声明),您可以通过赋值创建属性

有些语言比较死板,你必须事先告诉他们物体的形状。JavaScript不是

通常,解释器应该抛出语法错误,但它没有抛出

不是用JavaScript。代码中没有语法错误。(即使在结构更为严格的语言中,我也不认为这是语法错误。是的,这是一个错误,但不是语法错误。)


在您询问的评论中:


如果开发人员将字段名称拼写错误,这不会误导他吗


是的,这有时是个问题。它通常是通过某种脱毛或预处理阶段来解决的。目前最流行的一种是:它在JavaScript之上覆盖了一个严格的类型系统,并针对您所描述的情况引发错误。这是一种非常聪明和灵活的语言。如果你想对JavaScript进行严格的输入,我会使用它。(事实上,在我需要严格打字的情况下,我确实会使用它。)(不过,TypeScript并不是城里唯一的游戏。我还没有使用过它。)

为什么它会抛出错误?您使用
input.someOtherField='someothervalue'
创建了属性,如果开发人员拼写错误字段的名称,这不会误导他吗?假设这个对象只有一个字段,就像上面的代码一样,我们称它为“字段”。然而,开发人员在尝试修改字段“field”的值时输入了一个错误,他输入的是“fiield”。当稍后读取“field”的值时,他不会得到更新的值,并且解释器也不会抛出语法错误。我只是不明白在JS中有这样一个特性有什么意义。你对这个问题有什么想法吗?请。如果你担心会拼错属性并导致错误,我会使用Typescript而不是某些性能。谢谢!为什么它会抛出一个错误?您使用
input.someOtherField='someothervalue'
创建了属性,如果开发人员拼写错误字段的名称,这不会误导他吗?假设这个对象只有一个字段,就像上面的代码一样,我们称它为“字段”。然而,开发人员在尝试修改字段“field”的值时输入了一个错误,他输入的是“fiield”。当稍后读取“field”的值时,他不会得到更新的值,并且解释器也不会抛出语法错误。我只是不明白在JS中有这样一个特性有什么意义。你对这个问题有什么想法吗?请。如果你担心会拼错属性并导致错误,我会使用Typescript而不是某些性能。谢谢!