1、数据类型函数
JS中有5中简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。还有一种复杂数据类型------Object,Object本质是由一组无序的名值对组成的。spa
鉴于ECMAScript是松散类型的(能够给变量赋值为任意类型。),所以须要有一种手段来检测给定变量的数据类型----typeof就是负责提供这方面信息的操做符。对象
对一个值使用typeof操做符可能返回下列某个字符串:blog
undefined----若是这个值未初始化或未声明; ip
Boolean----若是这个值是布尔值;字符串
string---若是这个值是字符串;string
number----若是这个值是数值;io
object----若是这个值是对象或null;console
function----若是这个值是函数。function
有些时候,typeof操做符会返回一些使人迷惑但技术上却正确的值。好比调用typeof null 会返回“object”,应为特殊值null被认为是一个空的对象引用。
从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,所以经过typeof操做符来区分函数和其余对象是有必要的。
2、显式的转换数据类型
显示的转换数据类型主要经过JS定义的数据转换方法。
a.转型函数
转换为布尔值:
Boolean() :将一个值转换为其对应的Boolean值
e.g. var message = “Hello world!”;
var messageAsBoolean = Boolean(message)
console.log(messageAsBoolean); //true
各类数据类型及其对应的转换规则。
数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 “” (空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Underfined n/a undefined
转换为数字:
有3个函数能够把非数值转换为数值:Number()、parseInt()、parseFloat()。第一个函数,即转型函数Number()能够用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。这三个函数对于一样的输入会返回不一样的结果。
因为Number()函数在转换字符串时比较复杂并且不够合理,所以在处理字符串的时候更经常使用的是parseInt()函数。parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。若是第一个字符不是数字字符或者负号,parseInt()就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。(Number()对空字符返回0).若是第一个字符是数字字符,parseInt()会继续解析第二个字符、直至解析完全部后续的字符或者遇到了一个非数字字符。
与parseInt()函数相似,parseFloat()也是从第一个字符(位置0)开始解析每一个字符。并且也是一直解析到字符串末尾,或者解析到碰见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,所以它后面的字符串将被忽略。
转换为字符串
要把一个值转换为一个字符串有两种方式。第一种是使用几乎每一个值都有的toString()方法,这个方法惟一要作的就是返回相应值的字符串表现。
数值、布尔值、对象、和字符串值(没错,每一个字符串也都有一个toString()方法,该方法返回字符串的一个副本)都有toString()方法。但null和undefined值没有这个方法。
多数状况下,调用toString()方法没必要传递参数。可是,在调用数值的toString()方法时,能够传递一个参数:输出数值的基数。默认状况下,toString()方法以十进制格式返回数值的字符串表示。
在不知道要转换的值是否是null或undefined的状况下,还可使用转型函数String(),这个函数可以将任何类型的值转换为字符串。
3、隐式的数据转换
在JS中有一些操做符或者语句也会进行数据转换。好比if语句将条件转换为布尔类型值。
a. 递增和递减操做符
递增和递减操做符直接借鉴自C,并且各有两个版本:前置型和后置型(a++ ,a-- ,++a , --a)。顾名思义,前置型应该位于要操做的变量以前,然后置型应该位于要操做的变量以后。
这4个操做符对任何值都适用,也就是他们不只适用于整数,还能够用于字符串、布尔值、浮点数值和对象,此时伴随着隐式的数据类型转换。
b. 一元加和减操做符
在对非数值应用一元加操做符时,该操做符会像Number()转型函数同样对这个值执行转换。换句话说,布尔值false和true将被转换为0和1。
b. 逻辑非操做符 与 比较操做符 将任意值转换为 布尔值
逻辑非操做符首先会将他的操做数转换为一个布尔值,而后再对其求反。
关系比较操做符
if,do-while,while语句会将判断语句转换为布尔类型值。