基础数据类型
ECMAScript中有五种简单的数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。还有一中复杂数据类型 Object,Object本质上是由一组无序的名值对组成。
ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。
typeof操作符
ECMAScript是松散类型的,所以需要一个手段来检测给定变量的操作类型 typeof 。对一个值使用typeof操作符可能返回下列某个字符串:
undefined ---------- 如果值未定义 Undefined
boolean ---------- 如果这个值是布尔值 Boolean
string ---------- 如果这个值是字符串 String
number ---------- 如果这个值是数值类型 Number
object ---------- 如果这个值是对象或null Object
需要注意的是typeof null返回为object,因为特殊值null被认为是一个空的对象引用
undefined
var 变量声明,但是未初始化时,会返回undefined。
Null
Null类型是第二个只有一个值的数据类型,这个特殊的值是null。null表示一个空对象指针,
console.log(typeof(null)); // "object"
undefined和null的区别:
undefined值是派生自null的,二者相等,但是不是绝对相等:
console.log(null == undefined); //true
console.log(null === undefined); //false
在定义变量时没必要将一个变量显式地设置为undefined;但是在保存对象的变量还没有真正保存对象,就应该明确让变量保存为null。
Boolean
有两个属性值:true false。且区分大小写。
转换规则:
数据类型 | 转化为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非0数字值 | 0和NaN |
Object | 任何对象 | null |
undefined | 不适用 | undefined |
这个规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要。
var str = "Hello World!";
console.log(Boolean(str));
if(str){
alert(str);
}
字符串str自动转换为Boolean值(true),由于存在这s种自动执行的Boolean转化,因此确切地知道在流程语句中使用的是什么变量至关重要。错误地使用一个对象,而不是一个Boolean值,剧有可能彻底改变应用程序流程。
也可以使用(!)将对象转化为布尔值,然后(!!)是对这个对象的值先转换为布尔值,然后进行取反。
Number
1.浮点数
保存浮点数所需的空间是整数的2倍,所以ECMAScript会不失时机将浮点数值转换为整数。
var floatNum1 = 1.;
var floatNum2 = 10.0;
console.log(floatNum1,floatNum2); // 1 10
2.数值范围
判断数值是否是无穷的,使用isFinite()函数,这个函数判断,在数值范围内返回true,否则返回false。
3.NaN(Not a Number)
表示本来返回数值的操作数,但是未返回数值的情况。
特点:1.任何涉及NaN的操作,都会返回NaN 2.NaN与任何值都不相等,包括NaN本身。
isNaN()这个函数接收一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个数值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值。任何不能被转换为数值的值都会导致这个函数返回true。
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false
alert(isNaN("NaN")); //true
4.数值转换
规则很多,直接看例子Number():
console.log(Number("Hello World!")); // NaN
console.log(Number("")); //0
console.log(Number("00033")); //33
console.log(Number(true)); //1
console.log(Number(NaN)); //NaN
console.log(Number(null)); //0
console.log(Number(undefined)); //NaN
parseInt()和parseFloat()用于把字符串转化为数值。
console.log(parseInt("0022.5")); //22
console.log(parseInt(22.5)); //22
console.log(parseFloat("0022.5")); //22.5
可以看出:parseFloat()解析一个字符串,并返回一个浮点数。parseInt()解析一个字符串,并返回一个整数数。而且二者均省略了前导0。
String
String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。
转换为字符串:1.toString() 2.String()
//方法1
console.log((11).toString()); //"11"
console.log(typeof (11).toString()); //string
//方法2
var age;
console.log(String(12)); //"12"
console.log(String(true)); //"true"
console.log(String(null)); // "null"
console.log(String(age)); //"undefined"
注:null和undefined没有toString()方法。
Object类型(非基本数据类型)
对象实际是一组数据和功能的集合。对象可以通过执行new操作符后要创建的对象类型的名称来创建。在创建完成后,可以添加属性和方法。
var o = new Object();
在ECMAScript中,Object类型是它所有的示例的基础。
Object的每个实例都有下列属性和方法:
1.constructor:保存着用于创建当前对象的函数,对于前面例子而言,构造函数(constructor)就是Object()。
2.hasOwnProperty(prototypeName):用于检查给定的属性在当前对象实例中是否存在,prototypeName必须是字符串。
3.isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型。
4.propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in循环
5.toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
6.toString():返回对象的字符串表示。
7.valueOf():返回对象的字符串、数值或布尔值表示。与toString()结果相同。