1.ECMAScript中的5种简单数据类型
-
Undefined
:只有一个值undefined
,表示变量只被声明,没有被初始化,也就是有这个指针,但指针没有指向任何空间
var mes;
console.log(typeof mes); //undefined
-
Null
:只有一个值null
,表示一个空对象指针,因此用typeof
检测null
值时返回object
;如果定义的变量将来准备用于保存对象,那么最好将该变量初始化为null
-
Boolean
:有2个值,分别是true
和false
,常用于条件测试中
-
Number
:整数、浮点数、十六进制等都统一为该类型,需要注意的是Number类型是有范围的;还有NaN
表示非数值(Not a Number),这个数值表示一个本来要返回数值的操作数未返回数值的情况;任何涉及NaN
的操作都返回NaN
;NaN
与任何值都不相等,包括本身
-
String
:由零或多个16位Unicode字符组成的字符序列;可以用单引号或双引号表示,没有区别,匹配即可;任何字符串的长度都可以通过其length
属性获得
//ECMAScript中的字符串是不可变的
//要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量
var mes = 'Java';
mes = mes + 'Script';
console.log(mes); //JavaScript
//首先创建一个能容纳10个字符的新字符串
//然后在这个字符串中填充'Java'和'Script'
//最后销毁原来的字符串'Java'和'Script'
String类型包含一些特殊的字符字面量(转义字符):
\n: 换行
\r: 回车
\t:水平制表符
\\:\
2.ECMAScript中的复杂数据类型
-
Object
:JS的核心概念,JS的所有数据都可以被视为对象,即一种无序的数据集合,由若干个“键值对”(key-value)构成,key我们称为对象的属性,value可以是任何JavaScript类型,甚至可以是对象
3.typeof
和instanceof
的作用和区别
-
typeof
:一个操作符;用于获取一个变量的类型,一般只能返回如下结果:"number","boolean","string","function","object","undefined"
;但是当遇到Array,Null
等特殊对象时,typeof
只会返回"object"
,这就是typeof
的局限性
typeof(1); //"number"
typeof("2"); //"string"
typeof(new Object()); //"object"
-
instanceof
:用于判断某个变量是否是某个对象的实例,返回值为布尔值,instanceof
的内部机制是:每个实例都有proto
隐藏属性,instanceof
的时候会拿实例的proto
属性与构造函数的prototype
比较是否相同,因此写法也和typeof
不同
var a = [1,2,3];
var b = function(){};
console.log(a instanceof Array); //true
console.log(b instanceof Function); //true
4.数值转换
-
Number()
:可用于任何数据类型;规则相当复杂而且不合理,几乎不使用
-
parseInt()
和parseFloat()
:用于将字符串转换成数值;
-
parseInt()
和parseFloat()
规则如下:
- 忽略字符串前面的空白字符,找到第一个非空白字符
- 如果第一个字符不是负号(-)或者数字返回NaN(转换空字符串返回NaN)
- 如果是继续解析,直到非数字字符为止
- 0开头会当做八进制,0x开头会当做十六进制,但是可以指定第二个参数指定基数
-
parseInt()
和parseFloat()
区别:
- 字符串中第一个小数点是有效的
- 始终忽略前面的零
parseInt(" "); //NaN
parseInt("1234blue"); //1234
parseInt("22.5"); //22
parseFloat("22.5"); //22.5
parseFloat("0909.5"); //909.5