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

404未找到

我是 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'

我无法弄清楚所谓的领域如何someOtherFieldobj来到的存在!通常解释器应该抛出一个语法错误,但它没有。有人可以解释一下为什么吗?

TJ克劳德

我无法弄清楚 obj 中所谓的 someOtherField 字段是如何存在的!

因为这就是 JavaScript 的定义方式。您不必提前声明属性(尽管现在可以class构造中),您可以通过赋值来创建它们。

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

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

不是在 JavaScript 中。您的代码中没有语法错误。(即使在结构更严格的语言中,我也不希望它是语法错误。错误,是的,但不是语法错误。)


在您问过的评论中:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQLSTATE [42000]:语法错误或访问冲突:1072表中不存在键列'proform_id'

SQL语句“ CREATE EXTENSION [*]如果不存在UUID_OSSP”中的语法错误

使用Typescript时如何停止“ JQuery类型上不存在属性”语法错误?

PostgreSQL nextval引发错误关系不存在

PHP属性不存在,但使用时不会引发任何错误

SQLCMD.exe以语法错误退出,其中不存在语法错误

如何引发错误以破坏不存在的密钥

Django 1.11-CreateView-无效的表单针对不存在的对象属性引发错误

由于不存在文件中的语法错误,数据库项目构建失败

当对象不存在时,headObject永远不会引发错误

如果不存在,工作的CREATE VIEW会给出语法错误

检查对象是否存在,如果不存在则手动引发错误

MySQL未创建表,不断报告不存在的语法错误

PostgreSQL“如果不存在”总是抛出语法错误

Self in Python语法错误:语法无效,字符串属性不存在?

MYSQL:不存在语法错误

将BitmapImage.UriSource设置为不存在的Uri不会引发错误

访问JavaScript对象的不存在属性时如何引发错误

来自不存在的代码的MVC视图引发错误

如果将消息发送到不存在的主题,则不会引发任何错误

SQL“不存在”在“ Where”子句中引发错误

mysql insert-跳过重复语法错误-sprintf(不存在)

语法高亮指示错误(不存在)

角色不存在且将 NodeJs 中的查询插入 postgresql 的语法错误

“设备”类不存在或有语法错误

Near IF 语法错误(SQLite3+Objective-C)(如果不存在则更新)

订阅数字不会引发语法错误?

为什么在 numpy 数组中索引不存在的维度不会引发错误?

如何在没有语法错误的情况下插入不存在的值?