肉渣教程

JS 数据类型

上一节 下一节

JS数据类型

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去试试就知道了。不过这并不影响把它们独自作为一种数据类型来看待。就好比蝙蝠侠中有句哲言,无论你是谁,那都无所谓,关键在于所作所为。


字符串类型 String

字符串是由0个或1个或多个字符构成的。下面这些对象都是字符串类型:

var slogan1 = "fan qing fu ming";
var slogan2 = "反清复明";
var slogan3 = "It's cool!";
var slogan4 = 'Please call me "Jerk"!';

运行一下

数字类型 Number

不管是整数还是小数,JavaScript中都属于Number类型。其中特别大或者特别小的数字还可以用科学计数的方式来写。

var x = 41.9;    // 小数
var y = 666;     // 整数
var z = 785e5;   // 78500000
var k = 785e-5;  // 0.00785

运行一下

布尔型 Boolean

布尔型只有两个值:true 或 false(true代表条件成立,false代表条件不成立)

var x = 1;
var y = 1;
var z = 6;
(x == y)       // 返回true
(x == z)       // 返回false

运行一下

数组 Array

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

字典类型(Dict)在JavaScript中是不存在的,这里是专否一意孤行抽象出来的。一般来说都会直接放在JS对象构造中来说;经过再三考虑,还是决定抽象出一个字典类型(Dict),因为很多其他的编程语言中,都会把字典类型独自作为一种数据类型。

什么是字典?其实就是键值配对,key --> value,key是独一无二的,根据每个key可以获得value。key必须是字符串类型或数字类型,而value可以是任何数据类型。

var infoDict = { "name": "项羽", "sex": "男", "nickname": "西楚霸王" }

运行一下

对象类型 Object

不管是上述的数组对象(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 = "";   // 字符串虽然为空,但空字符串还是属于字符串。

undefined 和 null 不一样

先说结论:

  • 给对象赋值undefined,就是将对象的值(value)和类型(type)都设置为空
  • 给对象赋值null只是将对象的值(value)设置为空,而类型(type)不会变成空,而是变成object


案例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来看一下每个对象的类型吧。而数据类型可分两类:基础类型复合类型

数据类型 - 基础类型

基础类型是比较单一简单的数据类型,这一类数据类型不能自定义设置对象属性和方法。

  • string
  • number
  • boolean
  • undefined


示例:

typeof "zhuanfou"          // 返回"string" 
typeof 666                 // 返回"number"
typeof 1.23                // 返回"number"
typeof true                // 返回"boolean"
typeof false               // 返回"boolean"
typeof x                   // 返回 "undefined" (x是未定义的变量)

运行一下

数据类型 - 复合类型

复合类型的数据可自定义设置对象属性和方法。

  • object
  • function


示例:

typeof {'name':'Jerk', 'sex':'male'} // 返回"object"
typeof [1,2,3,4]                     // 返回"object"
typeof null                          // 返回"object"
typeof function myFunc(){}           // 返回"function"

运行一下


JS 数据类型

上一节 下一节