AS:问题是关于错误的类型,而不是现象
"use strict"
如果喜欢NaN
和undefined
更改了系统变量,则抛出TypeError 。
但是为什么它是类型错误?为什么不出现语法错误?
编辑:确实,这里不是SyntaxError,因为代码片段的语法没有错误。
但是,错误的根源在于某些受保护的对象无法手动更改。因此,很可能是访问错误(我知道没有这样的错误)。
那么,为什么访问错误看起来像类型一?
在ES5中,存在6种不同的本机错误:
此规范当前未使用此异常。保留该对象是为了与本规范的先前版本兼容。
表示数值已超出允许范围。
指示已检测到无效参考值。
指示发生了解析错误。
指示操作数的实际类型与预期的类型不同。
指示使用一种全局URI处理功能与其定义不兼容。
在您的情况下,将引发该错误,因为您尝试为window.NaN
或分配值window.undefined
,这是不可写的属性。
在分配新值之前,内部[[Put]]方法会检查[[CanPut]],由于该属性不可枚举,该方法将返回false。因此,[[Put]]将抛出。
因此,问题在于分配的引用(分配表达式中的左操作数)的可写性不是预期的。然后,在上述6种错误类型中,即使可写性不是type,最合适的类型似乎是TypeError 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句