1.typeof操作符
typeof 返回以下几种类型:
- “undefined”
- “boolean”
- “string”
- “number”
- “function”
- “object”
2.undefined类型
- 声明变量但未对其加以初始化时,这个变量的值就是undefined
- 引用未初始化的变量会报错 XXX is not defined
注:对未初始化和未声明的变量执行typeof操作符都返回undefined值**
3.null类型
null值表示一个空对象指针,意在保存对象的变量还没有真正保存对象,应该明确的让该变量保存null值。
注:null == undefined返回true
4.Boolean类型
该类型只有、两个字面值:true和false
可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值
- Boolean转Boolean,true->true ,false->false
- String转Boolean, 任何非空字符串->true , “”-> false
- Number转Boolean,任何非0数字值(包括无穷大)-> true,0和NaN -> false
- Object转Boolean,任何对象->true ,null->false
- undefined 转Boolean ->false
总结:只有0,null,undefined,"",NaN这五个值转换为false,其余都转换为true
5.Number类型
整数和浮点数,整数可以通过十进制、八进制和十六进制来表示。
- 八进制第一位必须是0,然后是八进制数字序列(0~7)。如果字面值中的数值超出了范围,那么前导0将被忽略,后面的数值将被当作十进制数值解析。(八进制字面量在严格模式下是无效的)
var octalNum1 = 070 //八进制的56
var octalNum2 = 079 //无效的八进制数值---解析为79
var octalNum3 = 08 //无效的八进制数值---解析为8
- 十六进制字面量的前两位必须是0x,后跟任何十六进制数字(0~9及A-F),其中字母A-F可以大写也可以小写
var hexNum1 = 0xA //16进制的10
var hexNum2 = 0x1f //16进制的31
注:在进行算数计算时,所有以八进制和十六进制便是德数值都将被转换成十进制数值
- 浮点数值
1.小数点前面可以没有整数,但是不推荐
var floatNum = .1//有效但不推荐
2.由于保存浮点数值需要的内存空间是保存整数值的两倍。因此ECMAScript会不失时机的将浮点数值转换为整数值。
var floatNumber = 1.;//小数点后面没有数字---解析为1
var floatNumber2 = 10.0;//整数---解析为10
3.浮点数值的最高精度是17位小数,但在进行算术计算时其精确度远远不如整数。例如0.1+0.2 =0.30000000000000004
- 数值范围
1.最小数值:Number.MIN_VALUE(5e-324)
2.最大数值:Number.MAX_VALUE(1.7976931348623157e+308)
3.如果计算结果超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。
4.使用isFinite()函数确定一个数值是不是有穷的 - NaN
用于表示一个本来要返回数值的操作数未返回数值的情况
1.任何涉及NaN的操作都会返回NaN
2.NaN与任何值都不相等,包括NaN本身
3.isNaN()函数用以确定不是数值。isNaN()在接收到一个值之后,会尝试将这个值转换为数值(基于Number())。任何不能被转换为数值的值都会导致这个函数返回true
isNaN(NaN) //true
isNaN(10) //false
isNaN("10") //false
isNaN("blue") //true
isNaN(true) //false
4.基于对象调用isNaN()函数时,会首先调用
对象的valueOf()方法确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。
isNaN({})//true
isNaN([])//false
isNaN([10])//false
isNaN([10,20])//true
- 数值转换
有三个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。第一个函数可用于任何数据类型,另两个函数专门用于把祖父穿转换成数值。
1.Number()函数的转换规则
(1)Boolean:true->1 false->0
(2)Number:简单的传入和返回
(3)null:返回0
(4)undefined:返回NaN
(5)String:
a.只包含数字,将其转换为十进制数值
b.有效的浮点格式,转换成对应的浮点数值
c.有效的十六进制,转换成对应的十进制整数值
d.空字符串""->0
e.字符串包含上述格式之外的字符,转换为NaN
(6)Object:调用对象的valueOf方法,然后依照前面的规则转换返回的值,如果转换的结果是NaN,则调用对象的toString()方法,然后再依照前面的规则转换返回的字符串值
var num1 = Number("Hello World") //NaN
var num2 = Number("") // 0
var num3 = Number("000011") // 11
var num4 = Number("true") // 1
var num5 = Number("1234blue") //NaN
var num6 = Number("undefined") //NaN
var num7 = Number({}) //NaN
var num8 = Number([]) //0
var num9 = Number([10]) //10
var num10 = Number([10,20]) //NaN
var num11 = Number(0xf) //15
var num12 = Number(null) //0
2.parseInt()函数的转换规则
(1)会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或符号,返回NaN
(2)如果第一个字符是数字字符,会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符
(3)字符串以0x开头且后跟数字字符,就回将其当做一个十六进制整数,字符串以0开头且后跟数字字符,则会将其当做一个八进制数来解析
var num1 = parseInt("1234blue") //1234
var num2 = parseInt("") //NaN
var num3 = parseInt("0xA") //56
var num4 = parseInt("22.5") //22
var num5 = parseInt("070") //56
var num6 = parseInt(undefined) //NaN
var num7 = parseInt(null) //NaN
var num8 = parseInt({}) //NaN
var num9 = parseInt([]) //NaN
var num10 = parseInt([10]) //10
var num11 = parseInt([10,20]) //10
(4)parseInt()提供第二个参数:转换时使用的基数
var num1 = parseInt('0xAF',16) //175
//实际上,如果指定了16作为第二个参数,字符串可以不带前面的0x
var num2 = parseInt('AF',16) //175
var num3 = parseInt('AF') //NaN
3.parseFloat()函数的转换规则
(1)字符串第一个小数点有效,第二个小数点无效
(2)始终会忽略前导的0(16进制格式的字符串始终会被转换成0)
(3)只解析十进制值,因此它没有用第二个参数指定基数的用法
(4)如果字符串包含的是一个可解析为整数的数(没有小数点或小数点后面都是0),会转换成整数
var num1 = parseFloat("1234blue") //1234
var num2 = parseFloat("0xA") //0
var num3 = parseFloat("22.5") //22.5
var num4 = parseFloat("22.34.5") //22.34
var num5 = parseFloat("0908.5") //908.5
var num6 = parseFloat("3.125e7") //31250000
6.String类型
把一个值转换为字符串有两种方式
- 使用每个值几乎都有的toString()方法,但null和undefined没有这个方法
多数情况下不必传递参数,但在调用数值的toString()方法时,可以传递一个参数:输出数值的基数
var num = 10
num.toString()//"10"
num.toString(2)//"1010"
num.toString(8)//"12"
num.toString(16)//"a"
- 转型函数String()
遵循下列规则:
(1)如果值有toString()方法,则调用该方法并返回相应结果
(2)如果值是null,则返回‘null’
(3)如果值是undefined,则返回‘undefined’
var value1 = 10
var value2 = true
var value3 = null
var value4 = undefined
String(value1) //"10"
String(value2) //"true"
String(value3) //"null"
String(value4) //"undefined"
7.Object类型
在ECMAScript中,Object类型是所有它的实例的基础,换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。
var o = new Object()
Object的每个实例都具有下列属性和方法
- constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是Object()
- hasOwnProperty(propertyname):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyname)必须以字符串形式指定
- isPrototypeOf(object):用于检查传入的对象是否四传入对象的原型
- propertyIsEnumerable(propertyname):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()一样,作为参数的属性名必须与字符串形式指定
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
- toString():返回对象的字符串表示
- valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()的返回值相同