为了账号安全,请及时绑定邮箱和手机立即绑定

为什么NULL是一个对象,空和未定义之间有什么区别?

为什么NULL是一个对象,空和未定义之间有什么区别?

收到一只叮咚 2019-06-19 16:50:53
为什么NULL是一个对象,空和未定义之间有什么区别?为什么null被认为是object用JavaScript?正在检查if ( object == null )       Do something同if ( !object )       Do something?此外:.之间的区别是什么?null和undefined?
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

这种差异可以归纳为以下片段:

alert(typeof(null));      // objectalert(typeof(undefined)); // undefinedalert(null !== undefined) //truealert(null == undefined)  //true

检查

object == null是不同的检查if ( !object ).

后者等于! Boolean(object),因为一元!运算符自动将右操作数转换为布尔值。

Boolean(null)等于假!false === true.

所以如果你的对象是非空 假的0"",该支票将通过,因为:

alert(Boolean(null)) //falsealert(Boolean(0))    //falsealert(Boolean(""))   //false


查看完整回答
反对 回复 2019-06-19
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

null不是物体,这是一个原始值..例如,不能向其添加属性。有时人们错误地认为它是一个物体,因为typeof null回报"object"..但这实际上是一个bug(甚至可以在ECMAScript 6中修复)。

.之间的区别nullundefined如下:

  • undefined*由JavaScript使用,意思是“无值”。未初始化变量、缺少参数和未知变量都有此值。

    > var noValueYet;> console.log(noValueYet);undefined> function foo(x) { console.log(x) }> foo()undefined> var obj = {};
    > console.log(obj.unknownProperty)undefined

    但是,访问未知变量会产生异常:

    > unknownVariableReferenceError: unknownVariable is not defined
  • null*程序员用来表示“无值”,例如作为函数的参数。

检查变量:

console.log(typeof unknownVariable === "undefined"); // truevar foo;console.log(typeof foo === "undefined"); 
// trueconsole.log(foo === undefined); // truevar bar = null;console.log(bar === null); // true

作为一般规则,您应该始终在JavaScript中使用=和从不=(=执行)各种转换会产生意想不到的结果)。支票x == null是一种边缘情况,因为它对两种情况都适用。nullundefined:

> null == nulltrue> undefined == nulltrue

检查变量是否有值的一种常见方法是将其转换为布尔值,并查看它是否为布尔值。true..该转换由if语句和布尔运算符!(“不”)。

function foo(param) {
    if (param) {
        // ...
    }}function foo(param) {
    if (! param) param = "abc";}function foo(param) {
    // || returns first operand that can't be converted to false
    param = param || "abc";}

此方法的缺点:以下所有值计算为false,所以您必须小心(例如,上面的检查不能区分undefined0).

  • undefinednull

  • 布尔人:

    false

  • 数字:

    +0-0NaN

  • 字符串:

    ""

可以通过以下方法测试到布尔值的转换:Boolean作为一个函数(通常它是一个构造函数,用于new):

> Boolean(null)false> Boolean("")false> Boolean(3-3)false> Boolean({})true> Boolean([])true


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 1142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信