- Undefined类型
Undefined类型只有一个值,计特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,例如
var msg;console.log(msg===undefined)//true
- Null类型
Null类型是第二个只有一个值的数据类型,这个特殊的值是null,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因
var car=null
console.log(car);//object
如果定义的变量准备再将来用于保存对象,那么做好将该变量初始化为null而不是其他值。这样一来,只要,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
实际上,undefined值是派生自null的值
console.log(null==undefined)//true
- Boolean类型
Boolean类型只有两个字面值:true和false - Number类型
Number类型来表示整数和浮点数值
console.log(0.1+0.2)///0.30000000000000004
关于浮点数值计算会产生的舍入误差的问题,这是使用基于IEEE745数值的浮点计算的通病
Infinity正无穷,-Infinity负无穷,是不是位于最大和最小之间可以用isFinite()这个函数,如果位于会返回true
console.log(isFinite(Infinity*2))//false
console.log(isFinite(4546))//true
NaN即非数值,这个数值用于表示一个本来要返回的操作属未返回数值的情况,NaN与任何值都不相等,包括NaN本身
console.log(NaN==NaN)//false
isNaN()函数会帮我们确定这个参数是否“不是数值”,isNaN()会尝试将这个值转化为数值
console.log(isNaN("10"))//false
console.log(isNaN("blue"))//true
console.log(isNaN(true))//false
有三个函数可以把非数值转化为数值:Number()、ParseInt()、ParseFloat()
Number()函数的转化规则如下:
类型 | 转化结果 |
---|---|
null | 0 |
Boolean | true和false分别转化为1和0 |
undefined | NaN |
如果是字符串,遵循下列规则:
字符串中只包含数值,者将其转化为十进制数值
字符串中包含有效的浮点数,则将其转化为相应的浮点数值
包含有效的十六进制数,者转化为相同大小的十进制数
字符串是空的,则将其转化为0
除上述格式之外的转化为NaN
如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转化返回的值。如果转化的结果是NaN
ParseInt()
由于Number()函数在转化字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是pareseInt()函数,pareseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空字符,如果第一个字符不是数值字符或者负号,pareseInt()就返回NaN;也就是说,用pareseInt()转化空字符串会返回NaN。如果第一个字符是数字支付,pareseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。列如,“123blue”会转化为123
pareseInt()参数提供第二个参数:转化时使用的基数(即多少进制)
ParseFloat()
ParseFloat()也是从第一个字符开始解析每个字符 。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。举例来说,“22.34.23”将会转化为22.34
ParseFloat()只能解析10进制
- String类型
String类型用于表示0或多个16位Unicode字符组成的字符序列,可以由双引号或单引号表示
任何字符串的长度都可以通过访问其length属性取得
console.log("javascript".length)//10
字符串是不可改变的,也就是说,字符串一旦创建,他的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量
数值、布尔值、对象和字符串值都有一个toSring()方法,该方法返回字符串的一个副本,但null和undefined没有这个方法,在调用toString()可以传递一个参数:输出数值的基数,可以输出二进制、八进制、十六进制
let num=10;console.log(num.toString(2))//"1010"
在不知道值是不是null或undefined的情况下可以使用转型函数String(),这个函数能够将任何类型的值转化为字符串
console.log(String(10))//"10"
console.log(String(true))//"true"
console.log(String(null))//"null"
console.log(String(undefined))//"undefined"
- Object类型
对象就是一组数据和功能的集合。独享可以通过new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性或方法,就可以创建自定义的对象
Object的每个实例都具有下列属性和方法:
属性方法 | |
---|---|
constructor | 保存着用于创建当前对象的函数,构造函数 |
hasOwnproperty(propertyName) | 用于检查给定的属性在当前对象实例中(而不是在实例原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定 |
isPrototypeOf(object) | 用于检查传入的对象是否是当前对象的原型 |
propertyIsEnumerable(propertyName) | 用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定 |
toLocaleString() | 返回对象的字符串表示,该字符串与执行环境的地区对应。 |
toString() | 返回对象的字符串表示 |
valueOf() | 返会对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同 |
对象的constructor属性引用了该对象的构造函数.对于 Object 对象,该指针指向原始的 Object() 函数,常用于判断未知对象的类型
var obj = {};
console.log(obj.constructor) //ƒ Object() { [native code] }
console.log(obj.constructor == Object) //true
var arr = [];
console.log(arr.constructor) //ƒ Array() { [native code] }
console.log(arr.constructor == Array) //true
hasOwnproperty(propertyName)
var a={
b:123
}
console.log(a.hasOwnProperty("b"))//true
console.log(a.hasOwnProperty("c"))//false