zoukankan      html  css  js  c++  java
  • null与undefined

    null 与 undefined

    JavaScript 中一共有 5 种基本类型,分别是 String、Number、Boolean、Null 和 Undefined 。前 3 种都比较好理解,后面两种就稍微复杂一点。 Null 类型只有一个值,就是 null ; Undefined 类型也只有一个值,即 undefined 。 null 和 undefined 都可以作为字面量(literal)在 JavaScript 代码中直接使用。

    null 与对象引用有关系,表示为空或不存在的对象引用。当声明一个变量却没有给它赋值的时候,它的值就是 undefined 。

    undefined 的值会出现在如下情况:

    从一个对象中获取某个属性,如果该对象及其 prototype 链 中的对象都没有该属性的时候,该属性的值为 undefined 。
    一个 function 如果没有显式的通过 return 来返回值给其调用者的话,其返回值就是 undefined 。有一个特例就是在使用new的时候。
    JavaScript 中的 function 可以声明任意个形式参数,当该 function 实际被调用的时候,传入的参数的个数如果小于声明的形式参数,那么多余的形式参数的值为 undefined 。

    关于 null 和 undefined 有一些有趣的特性:

    如果对值为 null 的变量使用 typeof 操作符的话,得到的结果是 object ;而对 undefined 的值使用 typeof,得到的结果是 undefined 。如 typeof null === "object";typeof undefined === "undefined"
    null == undefined,但是 null !== undefined
    if ("" || 0)
    对于 if 表达式,大家都不陌生。 JavaScript 中 if 后面紧跟的表达式的真假值判断与其它语言有所不同。具体请看表 1。


    表 1. JavaScript 中的真假值
    类型 真假值 
    Null 总是为假(false) 
    Undefined 总是为假(false) 
    Boolean 保持真假值不变 
    Number +0,-0 或是 NaN 的时候为假,其它值为真 
    String 空字符串的时候为假,其它值为真 
    Object 总是为真(true)

    从表 1中可以看到,在 JavaScript 中使得 if 判断为假的值可能有 null、undefined、false、+0、-0、NaN 和空字符串("")。

    == 与 ===

    JavaScript 中有两个判断值是否相等的操作符,== 与 === 。两者相比,== 会做一定的类型转换;而 === 不做类型转换,所接受的相等条件更加严格。

    === 操作符的判断算法

    在使用 === 来判断两个值是否相等的时候,如判断x===y,会首先比较两个值的类型是否相等,如果不相等的话,直接返回 false 。接着根据 x 的类型有不同的判断逻辑。

    如果 x 的类型是 Undefined 或 Null,则返回 true 。
    如果 x 的类型是 Number,只要 x 或 y 中有一个值为 NaN,就返回 false ;如果 x 和 y 的数字值相等,就返回 true ;如果 x 或 y 中有一个是 +0,另外一个是 -0,则返回 true 。
    如果 x 的类型是 String,当 x 和 y 的字符序列完全相同时返回 true,否则返回 false 。
    如果 x 的类型是 Boolean,当 x 和 y 同为 true 或 false 时返回 true,否则返回 false 。
    当 x 和 y 引用相同的对象时返回 true,否则返回 false 。


    == 操作符的判断算法

    在使用 == 来判断两个值是否相等的时候,如判断x==y,当 x 和 y 的类型一样的时候,判断逻辑与 === 一样;如果 x 和 y 的类型不一样,== 不是简单的返回 false,而是会做一定的类型转换。

    如果 x 和 y 中有一个是 null,另外一个是 undefined 的话,返回 true 。如null == undefined。
    如果 x 和 y 中一个的类型是 String,另外一个的类型是 Number 的话,会将 String 类型的值转换成 Number 来比较。如3 == "3"。
    如果 x 和 y 中一个的类型是 Boolean 的话,会将 Boolean 类型的值转换成 Number 来比较。如true == 1、true == "1"
    如果 x 和 y 中一个的类型是 String 或 Number,另外一个的类型是 Object 的话,会将 Object 类型的值转换成基本类型来比较。如[3,4] == "3,4"
    需要注意的是 == 操作符不一定是传递的,即从A == B, B == C并不能一定得出A == C。考虑下面的例子,var str1 = new String("Hello"); var str2 = new String("Hello"); str1 == "Hello"; str2 == "Hello",但是str1 != str2。


    Array

    JavaScript 中的数组(Array)和通常的编程语言,如 Java 或是 C/C++ 中的有很大不同。在 JavaScript 中的对象就是一个无序的关联数组,而 Array 正是利用 JavaScript 中对象的这种特性来实现的。在 JavaScript 中,Array 其实就是一个对象,只不过它的属性名是整数,另外有许多额外的属性(如 length)和方法(如 splice)等方便地操作数组。

    创建数组

    创建一个 Array 对象有两种方式,一种是以数组字面量的方式,另外一种是使用 Array 构造器。数组字面量的方式通常为大家所熟知。如var array1 = [2, 3, 4];。使用 Array 构造器有两种方式,一种是var array2 = new Array(1, 2, 3);;另外一种是var array3 = Array(1, 2, 3);。这两种使用方式的是等价的。使用 Array 构造器的时候,除了以初始元素作为参数之后,也可以使用数组大小作为参数。如var array4 = new Array(3);用来创建一个初始大小为 3 的数组,其中每个元素都是 undefined 。

    Array 的方法

    JavaScript 中的 Array 提供了很多方法。

    push和pop在数组的末尾进行操作,使得数组可以作为一个栈来使用。
    shift和unshift在数组的首部进行操作。
    slice(start, end)用来取得原始数组的子数组。其中参数start和end都可以是负数。如果是负数的话,实际使用的值是参数的原始值加上数组的长度。如var array = [2, 3, 4, 5]; array.slice(-2, -1);等价于array.slice(2, 3)。
    splice是最复杂的一个方法,它可以同时删除和添加元素。该方法的第一个参数表示要删除的元素的起始位置,第二个参数表示要删除的元素个数,其余的参 数表示要添加的元素。如代码var array = [2, 3, 4, 5]; array.splice(1, 2, 6, 7, 8);执行之后,array中的元素为[2, 6, 7, 8, 5]。该方法的返回被删除的元素。

    0、""、NaN、null和defined都是假的 。剩下的东西都是真的。

    换句话说,零、null、NaN和空字符串天生就是假 ;而其他的天生就是真 。

  • 相关阅读:
    Elementary Methods in Number Theory Exercise 1.2.25
    Elementary Methods in Number Theory Exercise 1.2.14
    图解欧几里德算法
    图解欧几里德算法
    Elementary Methods in Number Theory Exercise 1.2.14
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    分享下多年积累的对JAVA程序员成长之路的总结
    android异常之都是deamon惹的祸The connection to adb is down, and a severe error has occured.
    TomatoCartv1.1.8.2部署时报错
    JavaScript浏览器对象之二Document对象
  • 原文地址:https://www.cnblogs.com/lofty/p/3663732.html
Copyright © 2011-2022 走看看