JavaScript变量有很多不同的数据类型,比如如下三种:Number(数字类型)、String(字符串类型)、Boolean(布尔类型)、Object(对象型)等,如下例所示:
var length = 20; // Number(数字类型) var slogan = "Maintain World Peace"; // String(字符串类型) var whether = false; // Boolean(布尔型) var x = { "slogan": "世界和平", "length": 20 }; // Object(对象型)Dict字典型 var y = [ "反清复明", "世界和平" ]; // Object(对象性)Array数组型 var d = new Date(); // Object(对象性)Date类型
JavaScript中如上述例中的x变量,是一个键值配对的字典类型的变量;还有y变量代表的数组列表;以及变量d代表的日期类型。这些都是具有独自特性、口耳相熟的经典数据类型;但是它们在JavaScript中都使用广义的Object类型作为类型。用typeof去试试就知道了。不过这并不影响把它们独自作为一种数据类型来看待。就好比蝙蝠侠中有句哲言,无论你是谁,那都无所谓,关键在于所作所为。
字符串是由0个或1个或多个字符构成的。下面这些对象都是字符串类型:
var slogan1 = "fan qing fu ming"; var slogan2 = "反清复明"; var slogan3 = "It's cool!"; var slogan4 = 'Please call me "Jerk"!';
不管是整数还是小数,JavaScript中都属于Number类型。其中特别大或者特别小的数字还可以用科学计数的方式来写。
var x = 41.9; // 小数 var y = 666; // 整数 var z = 785e5; // 78500000 var k = 785e-5; // 0.00785
布尔型只有两个值:true 或 false(true代表条件成立,false代表条件不成立)
var x = 1; var y = 1; var z = 6; (x == y) // 返回true (x == z) // 返回false
JavaScript中的数组可以用中括号来声明定义,数组中元素之间用逗号分隔(记住要用英文的逗号,用中文逗号的那都是逗逼。)
var gangs = [ "日月神教", "太平天国", "义和团", "学生会" ]; var numberArray = [ 1, 9, 4, 9, 1, 0, 1, 6, 6, 6 ]; var mixArray = [ "反清复明", 6, "zhuanfou.com", 66.6, "sand-box.cn" ];
字典类型(Dict)在JavaScript中是不存在的,这里是专否一意孤行抽象出来的。一般来说都会直接放在JS对象构造中来说;经过再三考虑,还是决定抽象出一个字典类型(Dict),因为很多其他的编程语言中,都会把字典类型独自作为一种数据类型。
什么是字典?其实就是键值配对,key --> value
,key是独一无二的,根据每个key可以获得value。key必须是字符串类型或数字类型,而value可以是任何数据类型。
var infoDict = { "name": "项羽", "sex": "男", "nickname": "西楚霸王" }
不管是上述的数组对象(Array),还是专否抽象出来的字典类型对象(Dict),在JavaScript中,其真正的类型是Object,用typeof运算符去试验,返回的都会是“object”。因为数组类型和字典类型本质上就是对象类型Object。
从对象类型的角度来看字典类型,所谓的独一无二的key,就是该对象的一种属性名,而对应的value就是该属性的值。
var infoDict = { "name": "项羽" }; infoDict.sex = "男"; infoDict.nickname = "西楚霸王";
再展示一下,Array数组对象的实质也是Object类型:
var infoDict = [ "反清复明", "666" ]; infoDict.name = "项羽"; infoDict.sex = "男"; infoDict.nickname = "西楚霸王";
字符串虽然为空,但空字符串还是属于字符串。这是一件天经地义的事情。
var jerk = ""; // 字符串虽然为空,但空字符串还是属于字符串。
先说结论:
案例1:设置为undefined
slogan = undefined; // 对象的值(value)和类型(type)都会变为空
案例2:设置为null
slogan = null; // 对象的值(value)会变为空,类型(type)会变为object
进一步比较undefined和null
typeof undefined // undefined typeof null // object null === undefined // false null == undefined // true
判断运算符
===
是用来判断对象的值(value)和类型(type)是否全都相等。
typeof运算符可以返回对象的数据类型,使用typeof来看一下每个对象的类型吧。而数据类型可分两类:基础类型和复合类型。
基础类型是比较单一简单的数据类型,这一类数据类型不能自定义设置对象属性和方法。
示例:
typeof "zhuanfou" // 返回"string" typeof 666 // 返回"number" typeof 1.23 // 返回"number" typeof true // 返回"boolean" typeof false // 返回"boolean" typeof x // 返回 "undefined" (x是未定义的变量)
复合类型的数据可自定义设置对象属性和方法。
示例:
typeof {'name':'Jerk', 'sex':'male'} // 返回"object" typeof [1,2,3,4] // 返回"object" typeof null // 返回"object" typeof function myFunc(){} // 返回"function"