JavaScript数据类型

基本数据类型:

字符串:String

数字:Number

布尔值:Boolean   true/fasle

特殊数据类型:

空对象:Null

未定义:Undefined

复合数据类型:

对象:Object

数组: Array

一、      String字符串类型  

String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。

如:         var name = 'yan';
            var keMu = 'HTML5';
            console.log(name);   // yan   ,在控制台输出变量的值
            console.log(keMu);   // HTML5
 
任何字符串的长度都可以通过访问其length属性取得
      alert(str1.length);        //输出5
 
要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的toString()方法。
var age = 11;
    var ageAsString = age.toString();    //字符串"11"
    var found = true;
var foundAsString = found.toString();    //字符串"true"
数值、布尔值、对象和字符串值都有toString()方法。但null和undefined值没有这个方法。
 
二、Number  数字类型
数值类型包括了整数和浮点数,整数可以是十进制、十六进制和八进制数,十进制数由一串数字序列组成,它的第一个数字不能为0。如果第一个数字为0,则表示它是一个八进制数。如果0x,则表示它为一个十六进制数。 
浮点数必须包含一个数字、一个小数点或“e”(或“E”)。浮点数例子如下:3.1415、 -3.1E12、0.1e12和2E-12。

这种类型用来表示整数和浮点数值,还有一种特殊的数值,即NaN(非数值 Not a Number)。这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。但在JavaScript中,任何数值除以0会返回NaN,因此不会影响其他代码的执行。

NaN本身有两个非同寻常的特点。首先,任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括NaN本身。

例如,下面的代码会返回false。

             alert(NaN == NaN);    //false

JavaScript中有一个isNaN()函数,这个函数接受一个参数,该参数可以使任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串”10“或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true。例如:

     alert(isNaN(NaN));    //true

    alert(isNaN(10));    //false(10是一个数值)

    alert(isNaN("10"));    //false(可能被转换为数值10)

    alert(isNaN("blue"));    //true(不能被转换为数值)

    alert(isNaN(true));    //false(可能被转换为数值1)

  有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。第一个函数,即转型函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。这3个函数对于同样的输入会返回不同的结果。

  Number()函数的转换规则如下:

  如果是Boolean值,truefalse将分别被替换为10

  如果是数字值,只是简单的传入和返回

  如果是null值,返回0

  如果是undefined,返回NaN

  如果是字符串,遵循下列规则:

    如果字符串中只包含数字,则将其转换为十进制数值,即”1“会变成1,”123“会变成123,而”011“会变成11(前导的0被忽略)

    如果字符串中包含有效的浮点格式,如”1.1“,则将其转换为对应的浮点数(同样,也会忽略前导0)

    如果字符串中包含有效的十六进制格式,例如”0xf“,则将其转换为相同大小的十进制整数值

    如果字符串是空的,则将其转换为0

 如果字符串中包含除了上述格式之外的字符,则将其转换为NaN

  ● 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再依次按照前面的规则转换返回的字符串值。

    var num1 = Number("Hello World");    //NaN

    var num2 = Number("");                //0

    var num3 = Number("000011");        //11

    var num4 = Number(true);            //1

  由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数。parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符串不是数字字符或者负号,parseInt()会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。如果第一个字符是数字字符,praseInt()会继续解析第二个字符,知道解析完所有后续字符或者遇到了一个非数字字符。例如,"1234blue"会被转换为1234,”22.5“会被转换为22,因为小数点并不是有效的数字字符。

  如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式(即十进制、八进制、十六进制)。为了更好的理解parseInt()函数的转换规则,下面给出一些例子

    var num1 = parseInt("1234blue");    //1234

    var num2 = parseInt("");            //NaN

    var num3 = parseInt("0xA");            //10(十六进制)

    var num4 = parseInt("22.5");        //22

    var num5 = parseInt("070");            //56(八进制)

    var num6 = parseInt("70");            //70

    var num7 = parseInt("10",2);        //2(按二进制解析)

    var num8 = parseInt("10",8);        //8(按八进制解析)

    var num9 = parseInt("10",10);        //10(按十进制解析)

    var num10 = parseInt("10",16);        //16(按十六进制解析)

    var num11 = parseInt("AF");            //56(八进制)

    var num12 = parseInt("AF",16);        //175

  与parseInt()函数类似,parseFloat()也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。例如,”22.34.5“将会被转换成22.34。

  parseFloat()和parseInt()的第二个区别在于它始终都会忽略前导的零。由于parseFloat()值解析十进制值,因此它没有用第二个参数指定基数的用法。

    var num1 = parseFloat("1234blue");    //1234

    var num2 = parseFloat("0xA");        //0

    var num3 = parseFloat("22.5");        //22.5

    var num4 = parseFloat("22.34.5");    //22.34

    var num5 = parseFloat("0908.5");    //908.5

 

三、Boolean 布尔值

布尔值 true 代表“真”,false 代表“假”。一般关系运算符会返回布尔值的结果。另外,数值的 0、-0、特殊值的 nullNaNundefined 以及空字符("")都会被解释为 false ,其他值则会被解释为 true 。

下面的代码定义了一个名为 myBoolean 的布尔对象:

var myBoolean=new Boolean();

如果布尔对象无初始值或者其值为:  

0            -0      null   ""      false          undefined         NaN

那么对象的值为 false。否则,其值为 true(即使当自变量为字符串 "false" 时)!

var f1 = true, f2 = false

            console.log( f1 && f2 )     // false  && 逻辑运算符,与

            console.log( f1 || f2 )     // true   ||  漏记运算符, 或

四、Null  空对象  和  Undefined

首先说下null与undefined区别:

对已声明但未初始化的和未声明的变量执行typeof,都返回"undefined"。

null表示一个空对象指针,typeof操作会返回"object"。

一般不显式的把变量的值设置为undefined,但null相反,对于将要保存对象的变量,应明确的让该变量保存null值。

var bj;

alert(bj);      // undefined

bj = null;

alert(typeof bj);   //"object"

alert(bj == null);   //true

bj = {};

alert(bj == null);   //false

Null是一个对象,但是为空。因为是对象,所以 typeof null 返回 'object' 。
null 是 JavaScript 保留关键字。
null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
       表达式:123 + null    结果值:123
       表达式:123 * null    结果值:0


undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。
虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:

alert('undefined' in window);    //输出:true

var anObj = {};  

alert('undefined' in anObj);     //输出:false

从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。
注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。
undefined参与任何数值计算时,其结果一定是NaN。
随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!

五、  Object  对象

javascript 里最基本的数据类型是对象。JavaScript里的对象其实是一个无序的属性集合,属性又是一个个的名-值对。

除了字符串,数字,true,false,null或者undefined以外,其他所有的值在JavaScript里头都是对象。

对象是引用类型,如果变量x表示一个对象,当执行var y = x;语句后,实际上y和x指向的是同一个对象。所以,当你通过y改变对象的值,这种变化也会反映到x上。

如何创建对象: 


1. 字面量表示法:

var book = {};   //创建一个没有属性的对象
var book = {
   name : "The Definitive Guide";
  "main title" : "JavaScript";     //当属性名中间有空格,或者"-"时,要用引号把属性名括起来
   author : {                          //对象的属性也可以是对象
      firstname : "Rex";
      lastname : "Mai";
   }
};

2. 使用new关键字:

var o = new Object(); // 创建一个空对象,效果等同{}.
var a = new Array(); // 创建一个空数组,效果等同 [].
var d = new Date(); // 创建一个表示当前时间的对象
var r = new RegExp("js"); // 创建一个正则表达式对象

3. 使用Object.create() ,这是ECMAScript5 新添加的方法,该方法接受一个参数——对象原型。

var o1 = Object.create({x:1, y:2});
var o2 = Object.create(Object.prototype);    // 结果等同于{}或new Object()
 
 你可以给该方法传null,结果会是一个不继承任何属性和方法的空对象
 

获取对象的值:

通过.或者[]操作符。

         book.title;
         book["title"];
         var propertyName = "title";
         book[propertyName];
如果对象的属性是固定的,那么这两个方法的作用差别不大。但由于javascript是一种松散类型的语言,所以,你可以在程序运行期间为对象添加任意数量的属性。当你使用.操作符访问对象属性时,.后面的名字其实只是一个标识符,所以你必须完整的输入这个标识符,才能够访问到。
 
// 对象 Object ,值在{ name:value } ,键对值,即属性名:属性值
// 可根据其属性名找到相对应的属性值
var info = { 'name':'yan', 'keMu':'HTML5', 'age':'3' } 
console.log(info)   // Object { name: "yan", keMu: "HTML5", age: "3" }
console.log( info.name )  // yan

 

六、数组(Array)

ECMAScript的数组与其他语言中的数组有着相当大的区别。虽然ECMAScript中的数组也是有序列表,但是它数组你的每一项可以保存任何类型的数据。ECMAScript数组的大小是可以动态调整的。

创建数组的基本方式有两种

第一种是使用Array构造函数,如下所示:

 

复制代码 代码如下:


var colors = new Array();


如果知道数组要保存的项目数量,也可以给构造函数传递参数,而该参数会自动变成length属性的值,如下:


var colors = new Array(20);


也可以向Array构造函数中传递数组中应包含的项,如下代码所示:


var colors = new Array("red","blue");

第二种使用Array构造函数时也可以省略new操作符,如下所示:

var colors = Array(20);


创建数组的第二种方式是使用数组字面量表示法。数组字面量由一对包含数组项的方括号表示,多个数组项之间用逗号隔开,如下所示:

复制代码 代码如下:


var color = ["red","blue"];
var names = [];
var values = [1,2,]     //IE8及之前3项,其他2项,不建议使用


与对象一样,在使用数字字面量表示法时,也不会调用Array的构造函数。

在读取和设置数组的值时,要使用方括号并提供相应值的基于0的数字索引,如下所示:

复制代码 代码如下:

var colors = ["red","blue"]; //定义数组
alert(colors[0]); //red
colors[1] = "black" //修改第2项
colors[2] = "brown" //新增第3

原文地址:https://www.cnblogs.com/flyqingfei/p/5777461.html