javascript - 在 JavaScript 的严格模式下,为什么读取仅设置的属性不是错误?
问题描述
我最近了解到,如果我尝试写入一个有get
但没有的 JavaScript 属性set
,它会在“草率模式”下被忽略,但在严格模式下会出错。
OTOH,如果我尝试从set
-only 属性中读取,这undefined
两种模式都会返回。有没有理由在严格模式下这也不是错误?
解决方案
这可能是因为通常的做法是通过执行来测试 objectobj
的属性prop
是否具有值
if (obj.prop) { ...
或者
if (obj.prop !== undefined) { ...
严格模式的目标之一(如 MDN 所述)是:
- 通过更改它们以引发错误来消除一些 JavaScript 静默错误。
当程序员试图设置一个不可设置的属性时,程序员的意图很明确,即他们想要设置一个属性。所以引擎可以通过抛出错误来警告你。
但是当你这样做时obj.prop
,意图不是很清楚。as doing obj.kljasfbbsdbgjksb
(未定义的键)也是完全合法的。
程序员是在试图获取obj.prop
价值,还是只是通过做typeof obj.prop
、 ...obj.prop === undefined
等来检查的性质?
推荐阅读
- vba - 如何通过 VBA 将动态范围从另一个工作表引用到活动工作表单元格
- url - 用于替换部分 URL 的用户脚本
- java - 是否可以在 Spring 控制器中拆分请求参数?
- java - 组内没有组的平均值 - 流
- macos - 了解读取指向内存映射文件的 KERN_MEMORY_ERROR 地址的崩溃
- jquery - 在 IE 11 中更改复选框时调用 JQuery DataTable rowCallback
- c++ - 具有特征的函数指针
- amazon-web-services - 如何在查询 cloudtrail 事件时提供多个查找属性
- python - 训练 rasa 核心时出错
- loops - 文本框的 Pascal 递增变量名称