js类型显式隐式转换详解

js类型显式隐式转换详解

ID:82935833

大小:349.63 KB

页数:4页

时间:2022-11-12

上传者:186****5381
js类型显式隐式转换详解_第1页
js类型显式隐式转换详解_第2页
js类型显式隐式转换详解_第3页
js类型显式隐式转换详解_第4页
资源描述:

《js类型显式隐式转换详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

js类型显式隐式转换详解JS类型转换(强制和⾃动的规则)显式转换通过⼿动进⾏类型转换,Javascript提供了以下转型函数:转换为数值类型:Number(mix)、parseInt(string,radix)、parseFloat(string)转换为字符串类型:toString(radix)、String(mix)转换为布尔类型:Boolean(mix)Number(mix)函数,可以将任意类型的参数mix转换为数值类型。其规则为:(1)如果是布尔值,true和false分别被转换为1和0(2)如果是数字值,返回本⾝。(3)如果是null,返回0.(4)如果是undefined,返回NaN。(5)如果是字符串,遵循以下规则:1、如果字符串中只包含数字,则将其转换为⼗进制(忽略前导0)2、如果字符串中包含有效的浮点格式,将其转换为浮点数值(忽略前导0)3、如果是空字符串,将其转换为04、如果字符串中包含⾮以上格式,则将其转换为NaN(6)如果是对象,则调⽤对象的valueOf()⽅法,然后依据前⾯的规则转换返回的值。如果转换的结果是NaN,则调⽤对象的toString()⽅法,再次依照前⾯的规则转换返回的字符串值。console.log(Number(false))//0console.log(Number(-0))//-0console.log(Number(Infinity))//Infinityconsole.log(Number(null))//0console.log(Number(undefined))//NaNconsole.log(Number(0x11))//17console.log(Number('03'))//3console.log(Number('03x'))//NaNconsole.log(Number('0x03'))//3console.log(Number('+0'))//0console.log(Number('05'))//NaNconsole.log(Number('0a3'))//NaNconsole.log(Number('0.3'))//0.3console.log(Number('0.3.2'))//NaNconsole.log(Number('null'))//NaNconsole.log(Number(''))//0console.log(Number(newNumber(3)))//3console.log(Number(newString('null')))//NaNconsole.log(Number({a:3}))//NaNconsole.log(Number({}))//NaNconsole.log(Number([3,4]))//NaNconsole.log(Number([]))//0console.log(Number([1]))//1console.log(Number(['333']))//333下表列出了对象的valueOf()的返回值:对象返回值Array返回数组对象本⾝。BooleanBoolean值。Date存储的时间是从1970年1⽉1⽇午夜开始计的毫秒数UTC。

1对象返回值Function函数本⾝。Number数字值。Object对象本⾝。这是默认情况。String字符串值。toString(radix)⽅法。除undefined和null之外的所有类型的值都具有toString()⽅法,其作⽤是返回对象的字符串表⽰。对象操作Array将Array的元素转换为字符串。结果字符串由逗号分隔,且连接起来。Boolean如果Boolean值是true,则返回“true”。否则,返回“false”。Date返回⽇期的⽂字表⽰法。Error返回⼀个包含相关错误信息的字符串。Function返回如下格式的字符串,其中functionname是被调⽤toString⽅法函数的名称:functionfunctionname(){[nativecode]}Number返回数字的⽂字表⽰。String返回String对象的值。默认返回“[objectobjectname]”,其中objectname是对象类型的名称。String(mix)函数,将任何类型的值转换为字符串,其规则为:(1)如果有toString()⽅法,则调⽤该⽅法(不传递radix参数)并返回结果(2)如果是null,返回”null”(3)如果是undefined,返回”undefined”Boolean(mix)函数,将任何类型的值转换为布尔值。以下值会被转换为false:false、”"、0、+0、-0、NaN、null、undefined,其余任何值都会被转换为true。隐式转换在某些情况下,即使我们不提供显⽰转换,Javascript也会进⾏⾃动类型转换,主要情况有:1、⽤于检测是否为⾮数值的函数:isNaN(mix)isNaN()函数,经测试发现,该函数会尝试将参数值⽤Number()进⾏转换,如果结果为“⾮数值”则返回true,否则返回false。2、递增递减操作符(包括前置和后置++、--)、⼀元正负符号操作符(-、+)这些操作符适⽤于任何数据类型的值,针对不同类型的值,该操作符遵循以下规则(经过对⽐发现,其规则与Number()规则基本相同):(1)如果是包含有效数字字符的字符串,先将其转换为数字值(转换规则同Number()),在执⾏加减1的操作,字符串变量变为数值变量。(2)如果是不包含有效数字字符的字符串,将变量的值设置为NaN,字符串变量变成数值变量。(3)如果是布尔值false,先将其转换为0再执⾏加减1的操作,布尔值变量编程数值变量。(4)如果是布尔值true,先将其转换为1再执⾏加减1的操作,布尔值变量变成数值变量。(5)如果是浮点数值,执⾏加减1的操作。(6)如果是对象,先调⽤对象的valueOf()⽅法,然后对该返回值应⽤前⾯的规则。如果结果是NaN,则调⽤toString()⽅法后再应⽤前⾯的规则。对象变量变成数值变量。3、加法运算操作符

2加号运算操作符在Javascript也⽤于字符串连接符,所以加号操作符的规则分两种情况:如果两个操作值都是数值,其规则为:(1)如果⼀个操作数为NaN,则结果为NaN(2)如果是Infinity+Infinity,结果是Infinity(3)如果是-Infinity+(-Infinity),结果是-Infinity(4)如果是Infinity+(-Infinity),结果是NaN(5)如果是+0+(+0),结果为+0(6)如果是(-0)+(-0),结果为-0(7)如果是(+0)+(-0),结果为+0如果两个操作值都是字符串,则将它们拼接起来如果只有⼀个操作值为字符串,则将另外操作值转换为字符串,然后拼接起来如果⼀个操作数是对象、数值或者布尔值,则调⽤toString()⽅法取得字符串值,然后再应⽤前⾯的字符串规则。对于undefined和null,分别调⽤String()显式转换为字符串。可以看出,加法运算中,如果有⼀个操作值为字符串类型,则将另⼀个操作值转换为字符串,最后连接起来。console.log(1+'str')//'1str'console.log(1+3)//4console.log(1+'3')//'13'console.log('1'+'3')//'13'console.log(1+[])//'1'console.log(1+{})//'1[objectObject]'console.log(1+functiontest(){})//'1functiontest(){}'console.log([]+{})//'[objectObject]'console.log([1]+{})//'1[objectObject]'console.log([1]+[2])//'12'console.log(['3']+{})//'3[objectObject]'console.log(['4','5']+{})//'4,5[objectObject]'console.log(['4','5']+1)//'4,51'console.log(['4','5']+'1')//'4,51'4、乘除、减号运算符、取模运算符这些操作符针对的是运算,所以他们具有共同性:如果操作值之⼀不是数值,则被隐式调⽤Number()函数进⾏转换。5、逻辑操作符(!、&&、||)逻辑⾮(!)操作符⾸先通过Boolean()函数将它的操作值转换为布尔值,然后求反。⼀、逻辑与(&&)操作符,如果⼀个操作值不是布尔值时,遵循以下规则进⾏转换:(1)如果第⼀个操作数经Boolean()转换后为true,则返回第⼆个操作值,否则返回第⼀个值(不是Boolean()转换后的值)(2)如果有⼀个操作值为null,返回null(3)如果有⼀个操作值为NaN,返回NaN(4)如果有⼀个操作值为undefined,返回undefined逻辑或(||)操作符,如果⼀个操作值不是布尔值,遵循以下规则:(1)如果第⼀个操作值经Boolean()转换后为false,则返回第⼆个操作值,否则返回第⼀个操作值(不是Boolean()转换后的值)(2)对于undefined、null和NaN的处理规则与逻辑与(&&)相同6、关系操作符(<,>,<=,>=)与上述操作符⼀样,关系操作符的操作值也可以是任意类型的,所以使⽤⾮数值类型参与⽐较时也需要系统进⾏隐式类型转换:(1)如果两个操作值都是数值,则进⾏数值⽐较(2)如果两个操作值都是字符串,则⽐较字符串对应的字符编码值(3)如果只有⼀个操作值是数值,则将另⼀个操作值转换为数值,进⾏数值⽐较(4)如果⼀个操作数是对象,则调⽤valueOf()⽅法(如果对象没有valueOf()⽅法则调⽤toString()⽅法),得到的结果按照前⾯的规则执⾏⽐较(5)如果⼀个操作值是布尔值,则将其转换为数值,再进⾏⽐较注:NaN是⾮常特殊的值,它不和任何类型的值相等,包括它⾃⼰,同时它与任何类型的值⽐较⼤⼩时都返回false。

37、相等操作符(==)相等操作符会对操作值进⾏隐式转换后进⾏⽐较:(1)布尔类型与其它任何类型进⾏⽐较,布尔类型将会转换为number类型,如果为true,那么会转换为1,如果为false,会转换为整数0,即0。(2)如果⼀个操作值为字符串,另⼀个操作值为数值,则通过Number()函数将字符串转换为数值(3)如果⼀个操作值是对象,另⼀个不是,则调⽤对象的valueOf()⽅法,得到的结果按照前⾯的规则进⾏⽐较(4)null与undefined是相等的(5)如果⼀个操作值为NaN,则相等⽐较返回false(6)如果两个操作值都是对象,则⽐较它们是不是指向同⼀个对象(7)number类型或string类型与object类型进⾏⽐较,number或者string类型都会转换为object类型

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
最近更新
更多
大家都在看
近期热门
关闭