• undefind和null的区别


    在常见的强类型语言中,通常有一个表示“空”的值,比如null。但是在Javascript中,空(或者叫“无值”)有两种选择:undefined和null。在Javascript中除了这两个值其他都是对象。其他的基本类型都有其对象的包装类型。但是,typeof null返回的是object,这是一个一直未修复的bug。

    undedind 

    undefined实际上代表了不存在的值(non-existence of a value)。
    有许多的方法产生一个undefined值的代码。它通常遇到当试图访问一个不存在的值时。在这种情况下,在JavaScript这种动态的弱类型语言中,只会默认返回一个undefined值,而不是上升为一个错误:
    • 任何声明变量时没有提供一个初始值,都会有一个为undefined的默认值
    • 当试图访问一个不存在的对象属性或数组项时,返回一个undefined值
    • 如果省略了函数的返回语句,返回undefined
    • 函数调用时未提供的值结果将为undefined参数值
    • void操作符也可以返回一个undefined值。像Underscore的库使用它作为一个防御式的类型检查,因为它是不可变的,可以在任何上下文依赖返回undefined
    • undefined是一个预定义的全局变量(不像null关键字)初始化为undefined值 

    null

    通常用作一个空引用一个空对象的预期,就像一个占位符。typeof的这种行为已经被确认为一个错误,虽然提出了修正,出于后兼容的目的,这一点已经保持不变。 这就是为什么JavaScript环境从来没有设置一个值为null;它必须以编程方式完成。
    使用null的情况:
    • DOM,它是独立于语言的,不属于ECMAScript规范的范围。因为它是一个外部API,试图获取一个不存在的元素返回一个null值,而不是undefined。
    • 如果你需要给一个变量或属性指定一个不变值,将它传递给一个函数,或者从一个函数返回null,null几乎总是最好的选择。
    • JavaScript使用undefined并且程序员应该使用null。
    • 通过分配null值,有效地清除引用,并假设对象没有引用其他代码,指定垃圾收集,确保回收内存。 

    相似之处

    都是完全不可变的,没有属性和方法,也不能给其属性赋值。事实上,试图访问或定义一个属性将会引发一个类型错误(TypeError)。正如他们的名字暗示的那样,他们是完全无效的值。

    不同之处

    一个重要的区别,服务于不同的目的和理由。区分这两个值,你可以认为undefined代表一个意想不到的没有值而null作为预期没有值的代表。
    使用Object.prototype.toString.call()形式可以具体打印类型。
     
     
    Object.prototype.toString调用过程
    • 如果值是undefined,返回“[object Undefined]”。
    • 如果这个值为null,则返回“[object Null]”。
    • 让O作为调用ToObject同时传递this值作为参数的结果值。
    • 让class是O的内部属性[[Class]]的值。
    • 返回的结果连接三个字符串“[object ”,class,和“]”的结果的字符串值。 
  • 相关阅读:
    JavaScript与C# Windows应用程序交互
    SVG与CSS的特殊性
    Flash 仪表控件 FusionGadgets【转】
    如何获取Windows服务对应程序的所在目录
    记录几个CSS样式
    使用网络调试助手时出现 connect() failed 错误
    使用xml配置文件配置DataGridView的列信息
    javascript解析json
    iPhone开发笔记
    (转)C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
  • 原文地址:https://www.cnblogs.com/010101-/p/10945006.html
Copyright © 2020-2023  润新知