JavaScript 数据类型

数据类型   

      JavaScript基本数据类型包括五类,分别是Null、Undefined、Number、String、Boolean。还包括一种复杂的数据类型Object,Object是由一组无序的键值对组成。

typeof 操作符

      typeof操作符用于检测给定变量的数据类型,对一个值使用typeof操作符,返回结果分为以下六种情况:

1. "undefined" --- 该值未定义;   eg: typeof undefined、var a; typeof a、typeof b、 typeof Undefined、typeof Null(Undefined与Null和变量b一样,表示未定义的变量,并不是代表数据类型)

2. "number" --- 该值是数字;      eg: typeof 11、typeof -1314、typeof 13.55

3. "string" --- 该值是字符串;      eg: typeof "persistent"、typeof 'persistent'

4. "boolean" --- 该值是布尔值;   eg: typeof true、typeof false 

5. "Object" --- 该值是对象或null;eg: type of null、typeof {1:a}、typeof [1,2,3](数组也是对象)

6. "function" --- 该值是函数;      eg: typeof Number、typeof String、typeof Boolean、typeof Object、typeof Array、typeof Function

Undefined类型

       该类型仅有一个特殊的值,即undefined(它不是js的关键字,而是全局变量,即Global的一个属性。),它表示“缺少值”,此处应该有个值。典型用法:

1. 用var关键字申明一个变量并未初始化,该变量的值为undefined。  eg: var i; console.log( i== undefined);

2. 对象没有赋值的属性,该属性的值为undefined                          eg: var o = {}; console.log(o.p);        /* typeof o.p == null和typeof o.p == undefined都返回true,why???*/

3. 调用函数时,该提供的参数并未提供,该参数值为undefined         eg: function f(x) {console.log(x);} f();  

4. 函数没有返回值时, 默认返回undefined                                 eg: var x = f(); console.log(x);

       undefined是脚本引擎定义的一个常量,它在脚本引擎初始化完毕后存在。它的实际作用是用来表示一个已定义变量的未初始化状态(uninitialized),比如var i,i的值是undefined,因为i定义l了但未被初始化。如果从未在代码中出现过的变量被使用,这样的未定义就不是undefined所描述的未初始化,而是说明该变量完全未被登记到脚本引擎的上下文中。因此如下代码的输出结果为:

       var mess; console.log(mess == undefined);   //true  

       console.log(message == undefined);           //报错,提示ReferenceError: messages is not defined

       在实际使用中,使用typeof操作符来判断变量是否未定义,是完全可以兼容未定义(undefined)和未初始化(uninitialized)两种状态的,因此如下代码的输出结果为:

       console.log(typeof message)                    //undefined

       var mess; console.log(typeof mess)        //undefined

 

Null类型

       该类型也仅有一个值,即null(它是js的关键字),表示对象不存在。典型用法:

1. 作为函数的参数,表示该函数的参数不是对象

2. 作为原型链的终点 (Object.getPrototypeOf(Object.prototype)   //null)

3. 定义的变量将来用于保存对象,最好将变量初始化为null而非其它值。

       null本身是Null类型,但typeof null === "object"并非是因为null是Object,而是历史遗留问题。JS创始人也曾尝试性修复typeof null === "null",但在v8引擎中实现后导致大量问题,因此该提案被拒绝。

       null == undefined; //true  undefined派生自null,因此ECMA-262规定对它们的相等性测试返回true。

       null === undefined; //false 由于null是"object"类型,undefined是"undefined"类型,因此返回false。

 

Boolean类型

       该类型只有两个值,即true和false。要将一个值值转化为对应的Boolean值,可以使用类型转换函数Boolean()。 

Number类型

       表示整数和浮点数值,以及一种特殊的数值NaN(Not a Number)。

       NaN用于表示本该返回数值时未返回数值的情况。例如在其它编程语言中,任何数值除以0,会报错,代码停止运行。但在JavaScript中,任何数值除以0会返回NaN,因此不会影响代码的执行。

       NaN本身有两个特点:一,任何涉及NaN的操作,返回NaN(NaN/10,返回NaN);二,NaN与任何值都不相等,包括它自身(NaN == NaN //false) 

       isNaN()函数,接收一个参数,用于判断传入的值是否不是数值。参数为数值,返回true,参数不为数值,尝试将参数转化为数值,字符串"10"和Boolean类型的值能自动转化为数值。eg:isNaN(NaN) //true、isNaN("10") //false、isNaN("blue") //true、isNaN(true) //false、isNaN(25) //false 

       将非数值转化为数值有3个函数:parseInt()、parseFloat()和Number() 。

parseInt():从第一个字符开始解析字符,直到解析完最后一个字符,除非遇到一个非数字字符。 它会忽略字符串前面的空格,直到遇到了第一个非空格字符,如果该字符不是数字或负号,则返回NaN。因此parseInt()转换空字符返回false。如果第一个字符为数字,继续解析下一字符,直到最后一个字符或是遇到非数字字符。另外如果第一字符为数字,parseInt能识别各种进制的数字。示例如下:

       console.log(parseInt("1234")); //1234         parseInt("   35   "); //35

       parseInt("1234blue"); //1234   parseInt("22.5"); //22 

       parseInt(""); //NaN

       parseInt(NaN); //NaN

       parseInt("0xA"); // 10   parseInt("070"); //未定,70或56   parseInt("70"); //70 

       parseInt("10",2); //2     parseInt("10",8); //8   parseInt("10",10); //10   parseInt("10",16); //16   parseInt("AF",16); //175

parseFloat():从第一个字符开始解析,一直解析到最后一个字符或是遇到了无效的浮点数字符。字符串中第一小数点是有效的,第二个小数点是无效的。parseFloat()与parseInt()的区别在于,parseFloat会忽略前导的零值,parseFloat将值解析为十进制值,没有第二个参数指定基数的用法

        console.log(parseFloat("22.45")); //22.45 

        parseFloat("22.22.33"); //22.33

        parseFloat("022.3"); //22.3 

        parseFloat("1234blue"); //1234

        parseFloat("0xA"); //0 


String 类型

       String类型用于表示由零个或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号""或单引号''表示。eg: var str = "hee";

       length属性表示字符串的长度。 eg:var str = "leee"; str.length; //4

       将一个值转化为字符串有2个函数:toString()和String()。

toString():数值、布尔值、对象和字符串都有toString()方法,但null和defined值没有toString()方法。调用数值的toString()方法时,可以传递参数,表示输出数值的基数。eg:

       var num = 10;

       num.toString(); //"10"

       num.toString(2); //"1010"

       num.toString(8); //"12"

       num.toString(10); //"10" 

       num.toString(16); //"a"

       在不确定待转型的值是否为null或undefined的情况下,可以使用String()函数,该函数遵循如下转型规则:

1. 如果值有toString()方法,调用该方法(不带参数),返回相应结果

2. 如果值为null,返回"null"

3. 如果值为undefined,返回"undefined" 

Object类型

       Object类型实际上就是一组数据和功能的集合。对象可以通过构造函数的方式创建。也可通过创建Object的实例,并添加自己的属性和方法,就可以创建自定义对象。eg: var o = new Object();

       Object的每个实例都拥有下列的属性和方法:

1. constructor -- 保存创建当前对象的函数

2. hasOwnProperty(propertyName) -- 指定的属性是否是存在于当前对象的实例中,而不是存在于对象的原型中

3. isPrototypeOf(object) -- 传入的对象是否是另一个对象的原型

4. propertyIsEnumerable(propertyName) -- 检测指定的属性能否用for .. in语句枚举

5. toString() -- 返回对象的字符串表示

6. valueOf() -- 返回对象的字符串、数值、布尔值表示,通常与toString()的返回值相同

原文地址:https://www.cnblogs.com/sun-mile-rain/p/4018075.html