alert(typeof(null)); //object
为什么alert(null instanceof Object); 为false?
为什么alert(null instanceof Object); 为false?
解决方案 »
- javascript里为组件添加onclick事件的参数问题
- 急!如何将new ActiveXObject出的控件标记为安全,或通过js实现将没有标记为安全的控件由禁用改为启用啊?
- 寻求跨网页菜单的问题解决方案
- FireFox里设置top left没作用
- 在IE7里正常.在IE6中显示说Marquee未定义
- 一个js的程序有点不懂,大家指点一下,谢谢了!
- js如何操作table的cellspacing和bordercolor
- window.open怎么打开一个只有菜单栏右侧小地球的窗口?
- 100分求一个翻页效果,急急急
- js 正则表达式问题 求大神求大神 快来啊 急!!!!!
- 高分求解firefox下回车自动提交表单的问题
- jquery如何 载入html页面到div中
instanceof 表示某个变量是否是某个对象的实例 。我是这么理解的 。
所以第二个为false 。
但null返回object这个其实是最初JavaScript的实现的一个错误,
然后被ECMAScript沿用了,成为了现在的标准,不过我们把null可以理解为尚未存在的对象的占位符,这样就不矛盾了 ,虽然这是一种“辩解”。
对于我们开发人员 还是要警惕这种“语言特性”。
11.4.3 The typeof Operator
The production UnaryExpression : typeof UnaryExpression is evaluated as follows:
1. Evaluate UnaryExpression.
2. If Type(Result(1)) is not Reference, go to step 4.
3. If GetBase(Result(1)) is null, return "undefined".
4. Call GetValue(Result(1)).
5. Return a string determined by Type(Result(4)) according to the following table:
Type Result
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Object (native and
doesn’t implement
[[Call]])
"object"
Object (native and
implements [[Call]])
"function"
Object (host) Implementation-dependent可以看到,对于Null类型的值(只有null),规范就是定义返回"object"这个字符串。但是本质上Null和Object不是一个数据类型,null值并不是以Object为原型创建出来的。所以null instanceof Object是false。但从这里也可以看到,null确实是javascript中用来表示空引用的一个特殊值。使得它不是instanceof Ojbect,而typeof null是“object”。在语义上也是可以理解的。