基本概念
将值从一种类型转换为另一种类型称为类型转换,类型转换总是返回基本类型值,如字符串、数字和布尔值,不会返回引用类型值。
类型转换分为“显式”和“隐式”:“显式”转换发生在静态类型语言的编译阶段,而“隐式”转换则发生在动态类型语言的运行时。
显式类型转换
非字符串到字符串的类型转换
toString()
方法
数字、布尔值、字符串和对象都有 toString() 方法,但 null 和 undefined 没有。
例子:
var name = "Tom", age = 19, isStudent = true; console.log(name.toString()); //输出:"Tom" console.log(age.toString()); //输出:"19" console.log(isStudent.toString()); //输出:"true" var obj = { name: "Tom" }, arr = [19, 20]; console.log(obj.toString()); //输出:"[object Object]" console.log(arr.toString()); //输出:"19,20"
*基本类型值不能直接使用 toString() 方法,所以 JavaScript 引擎会自动为基本类型值创建一个封装对象,然后对该对象调用 toString()。
String()
方法
这个方法能够将任何类型的值转换为字符串,基本的转换规则是:
1、如果值有toString()方法,则调用该方法进行转换;
2、如果值是null,则返回“null”;
3、如果值是undefined,则返回“undefined”。
例子:
console.log(String(11)); //输出:"11" console.log(String(true)); //输出:"true" console.log(String("love")); //输出:"love" console.log(String(null)); //输出:"null" console.log(String(undefined)); //输出:"undefined" console.log(String({ name: "Tom" })); //输出:"[object Object]" console.log(String([1, 2])); //输出:"1,2"
非数字到数字的类型转换
Number()
方法
这个方法可以用于任何数据类型,基本的转换规则是:
1、如果是Boolean值,true和false将分别被转换为1和0;
2、如果是数字值,只是简单的传入和返回;
3、如果是null值,返回0;
4、如果是undefined值,返回NaN;
5、如果是字符串,遵循下列规则:
- 如果字符串中只包含数字,将其转换为十进制。即“123”转换为123,“011”转换为11(忽略前导0);
- 如果字符串中包含有效的浮点格式,如“1.1”将其转换为对应的浮点数值(同样忽略前导0);
- 如果字符串是空的,不包含任何字符,则将其转换为0;
- 如果字符串中包含除上述以外的字符,则将其转换为NaN。
6、如果是对象,会首先检查该值是否有 valueOf() 方法。如果有,并且可以成功返回基本类型值,那么就使用该方法的返回值进行强制类型转换;如果没有就使用 toString() 的返回值来进行强制类型转换。如果 valueOf() 和 toString() 均不返回基本类型值,会产生 TypeError 错误。
*valueOf() 和 toString() 都属于 Object 的原型方法,valueOf() 返回类型不变的原始值而非值的字符串形式。
例子:
console.log(Number(true)); //输出:1 console.log(Number(10)); //输出:10 console.log(Number(null)); //输出:0 console.log(Number(undefined)); //输出:NaN console.log(Number("123")); //输出:123 console.log(Number("01")); //输出:1 console.log(Number("1.1")); //输出:1.1 console.log(Number("")); //输出:0 console.log(Number("love")); //输出:NaN //转换过程:{name: "Tom"} => "[object Object]" => NaN console.log(Number({ name: "Tom" })); //输出:NaN //转换过程:[1,2] => "1,2" => NaN console.log(Number([1, 2])); //输出:NaN //转换过程:[999] => "999" => 999 console.log(Number([999])); //输出:999 console.log(Number(new Date)); //以微秒为单位的数字时间
parseInt()
方法
这个方法是专门用于把字符串转换成整数的,非字符串参数会首先被强制转换为字符串,它的基本转换规则是:
1、如果第一个字符不是数字或者负号,返回NaN;
2、如果第一个字符是数字,会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。
例子:
例子:
//非字符串类型 //转换过程:10.1 => "10.1" => 10 console.log(parseInt(10.1)); //输出:10 //转换过程:0.0000008 => "8e-7" => 8 console.log(parseInt(0.0000008)); //输出:8 //字符串类型 console.log(parseInt("10abc")); //输出:10 console.log(parseInt("abc")); //输出:NaN
*从 ES5 开始,parseInt() 默认转换为十进制数,如果需要转换其他基数(即多少进制),可以为这个函数提供第二个参数,例如:parseInt( “0xAF”, 16 ) 。
parseFloat() 方法与 parseInt() 类似,用于解析浮点数。字符串中的第一个小数点是有效的,而第二个小数点是无效的。除此之外,parseFloat() 方法只能解析十进制数。
例子:
console.log(parseFloat("10abc")); //输出:10
console.log(parseFloat("11.22.33")); //输出:11.22
console.log(parseFloat("011.22")); //输出:11.22
非布尔值到布尔值的类型转换
Boolean()
方法
可以对任何数据类型的值调用 Boolean() 方法,而且总会返回一个 Boolean 值,基本的转换规则是:
1、以下这些是可以被转换为 false 的值:
- undefined
- null
- false
- +0、-0 和 NaN
- “”
2、上面列举之外的值都是可以被转换为 true 的值。
例子:
console.log(Boolean(undefined)); //输出:false console.log(Boolean(null)); //输出:false console.log(Boolean(false)); //输出:false console.log(Boolean(0)); //输出:false console.log(Boolean(-0)); //输出:false console.log(Boolean(NaN)); //输出:false console.log(Boolean("")); //输出:false
所有的对象都是可以被转换为 true 的值,包括使用Boolean、 Number 和 String 来创建的基本包装类型的对象。
例子:
console.log(Boolean(new Boolean(false))); //输出:true console.log(Boolean(new Number(0))); //输出:true console.log(Boolean(new String(""))); //输出:true console.log(Boolean([])); //输出:true console.log(Boolean({})); //输出:true
如有错误,欢迎指正,本人不胜感激。
以上所述是小编给大家介绍的JavaScript显式数据类型转换详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】