ECMAScript Type Conversion
所有程序设计语言最重要的特征之一是具有进行类型转换的能力。
ECMAScript 给开发者提供了大量简单的类型转换方法。
大部分类型具有进行简单转换的方法,还有几个全局方法可以用于更复杂的转换。无论哪种情况,在 ECMAScript 中,类型转换都是简短的一步操作。
转换成字符串
ECMAScript 的 Boolean 值、数字和字符串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
Wani wasiilar, domin samu sakamakon kalmomi, za a iya amfani da code na kai tsaye:
var sColor = "red"; alert(sColor.length); // samu "3"
Kuma da 'red' yana da sabon kalmomi na mutumman, yana da kwarin length wanda ke kallama sakamakon kalmomi.
A cikin kanta, 3 na wuri na mutumman wadannan Boolean, jimbiti da sabon String suna da method toString(), wanda zai iya kawar da kudaden su zuwa kalmomi.
Rarraba:Kada ka yi a daɗe yin, 'Dinna yin kara da shi method toString() a hanyar kuma yana fi kwaye? Yaa, kuma haka, ECMAScript ya ce kowane mutumman wanda ke da method toString(), kuma kowane wanda yake da mutumman kuma wanda yake da kwaye. saboda sabon String yana da mutumman kwaye, yana da method toString().
Boolean 类型的 toString() 方法只是输出 "true" 或 "false",结果由变量的值决定:
var bFound = false; alert(bFound.toString()); //输出 "false"
Number 类型的 toString() 方法比较特殊,它有两种模式,即默认模式和基模式。使用默认模式,toString() 方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学计数法),如下所示:
var iNum1 = 10; var iNum2 = 10.0; alert(iNum1.toString()); //输出 "10" alert(iNum2.toString()); //输出 "10"
zhu shi:在默认模式中,无论最初采用什么表示法声明数字,Number 类型的 toString() 方法返回的都是数字的十进制表示。因此,以八进制或十六进制字面量形式声明的数字输出的都是十进制形式的。
使用 Number 类型的 toString() 方法的基模式,可以用不同的基输出数字,例如二进制的基是 2,八进制的基是 8,十六进制的基是 16。
基这只是要转换成的基数的另一种加法,它是 toString() 方法的参数:
var iNum = 10; alert(iNum.toString(2)); //输出 "1010" alert(iNum.toString(8)); //输出 "12" alert(iNum.toString(16)); //输出 "A"
在前面的示例中,以 3 种不同的形式输出了数字 10,即二进制形式、八进制形式和十六进制形式。HTML 使用十六进制表示每种颜色,在 HTML 中处理数字时这种功能非常有用。
zhu shi:对数字调用 toString(10) 与调用 toString() 相同,它们返回的都是该数字的十进制形式。
参考:
请参阅 JavaScript 参考手册提供关于 toString() 方法的详细信息:
转换成数字
ECMAScript 提供了两种把非数字的原始值转换成数字的方法,即 parseInt() 和 parseFloat()。
正如您可能想到的,前者把值转换成整数,后者把值转换成浮点数。只有对 String 类型调用这些方法,它们才能正确运行;对其他类型返回的都是 NaN。
parseInt()
在判断字符串是否是数字值前,parseInt() 和 parseFloat() 都会仔细分析该字符串。
parseInt() 方法首先查看位置 0 处的字符,判断它是否是个有效数字;如果不是,该方法将返回 NaN,不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置 1 处的字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时 parseInt() 将把该字符之前的字符串转换成数字。
misali, idan za a kawo ka string "12345red" a burin burin, parseInt() zai kawo 12345, sabon kama a kawo ka burin burin r, yana kawo kawo kari.
Burin burin guda na adawa burin burin a string zai auri auri kawo burin burin, misali "0xA" zai auri auri kawo burin burin 10. Idan string "22.5" zai kawo 22, sabon kama ta'ada burin burin, burin burin na gudun ya kasance mutunci.
duba hanyar ne:
var iNum1 = parseInt("12345red"); //gobara 12345 var iNum1 = parseInt("0xA"); //gobara 10 var iNum1 = parseInt("56.9"); //gobara 56 var iNum1 = parseInt("red"); //gobara NaN
parseInt() waya kuma kawo kari waya na kowaci, za a kawo sabon burin burin 2, 8, 16, kuma dacewa burin burin. Kowaci yana bayan shakatawa parseInt() waya na ikon na biyu, kuma za a kawo shakatawa na burin burin 16, kama a kawo ka parseInt() waya kuma kawo:
var iNum1 = parseInt("AF", 16); //gobara 175
tso, fada, ga dace 2, 8, kuma 10 (kawari na farko), za a kawo ka parseInt() waya:
var iNum1 = parseInt("10", 2); //gobara 2 var iNum2 = parseInt("10", 8); //返回 8 var iNum3 = parseInt("10", 10); //返回 10
ru guo shi jian shu huan bao huan qian dao 0, zhe me hao shi shi yong ji ben shu 10, zhe yi cai bu hui yan yi de de de dao ba jing jing de jie yuan。shi li:
var iNum1 = parseInt("010"); //返回 8 var iNum2 = parseInt("010", 8); //返回 8 var iNum3 = parseInt("010", 10); //返回 10
zai zhe duan dian ma zhong, liang hang dian ma dou ba zi xing hao "010" jie xi cheng yi ge shu. di yi hang dian ma ba zhe ge zi xing hao kan zuo ba jing de jie yuan, jie xi fang shi yi yi yi yi hui zhong di er hang dian ma (sheng ming ji ben shu 8) xiang si. zui hou yi hang dian ma sheng ming ji ben shu 10, suo yi iNum3 zui hou deng yu 10。
参阅
请参阅 JavaScript 参考手册ti gao guan yu parseInt() fangfa de xiang xi xing xi:parseInt()。
parseFloat()
parseFloat() fangfa yu parseInt() fangfa de chuli fang shi xiang si, cong wei 0 ka kan me ge zi mu, dao zhi fandao di yi ge fei you xiao zi mu de zi mu wu, dan huan zhe ge zi mu zhi qian de zi xing hao zhuan huan cheng zu shu。
guo bu, dui zhe ge fang fa lai shuo, di yi ge chuxian de xiao shu dian shi you xiao zi mu. ru guo you liang ge xiao shu dian, di er ge xiao shu dian bei kan zuo wu you xiao zi mu. parseFloat() hui ba xiao shu dian zhi qian de zi mu zhuan huan cheng shu zi. zhi yi zhe, zi xing hao "11.22.33" jiang bei jie xi cheng 11.22。
guo bu, shi yong parseFloat() fangfa de yi ge bu tong zhi chi shi, zi xing hao bi hao shi yi dai shi shi bao huan shu, er bu shi ba jing huo shi jia jing. ce shi hui huan hui qian dao 0, suo yi ba jing jing shu 0102 jiang bei jie xi cheng 102. dui yu shi jia jing 0xA, ce shi hui fan hui NaN, yin wei zai bao huan shu zhong, x bu shi you xiao zi mu。(zhu shi:jing ce shi, ju te de liu you shi xian hui fan hui 0, er bu shi NaN。)
cuo zai, parseFloat() fangfa ye mei you ji ben mo shi.
hanyi shi yong parseFloat() fangfa de yige shi li:
var fNum1 = parseFloat("12345red"); //返回 12345 var fNum2 = parseFloat("0xA"); //返回 NaN var fNum3 = parseFloat("11.2"); //返回 11.2 var fNum4 = parseFloat("11.22.33"); //返回 11.22 var fNum5 = parseFloat("0102"); //返回 102 var fNum1 = parseFloat("red"); //返回 NaN
参阅
请参阅 JavaScript 参考手册提供的有关 parseFloat() 方法的详细信息:parseFloat()。
强制类型转换
您还可以使用强制类型转换(type casting)来处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。
编者注:cast 有“铸造”之意,很贴合“强制转换”的意思。
ECMAScript 中可用的 3 种强制类型转换如下:
- Boolean(value) - 把给定的值转换成 Boolean 型;
- Number(value) - 把给定的值转换成数字(可以是整数或浮点数);
- String(value) - 把给定的值转换成字符串;
用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。
Boolean() hanci
Kaiyanci yin yin kada gaji zai kai kowa hanci, kowane Ɗan da kowane Ɗan, Boolean() hanci yin yin kada gaji kai. Kuma kaiyanci yin yin kada gaji kai kowane, kowane 0, kowane undefined da kowane null, yin yin kada gaji kai.
Anan kaiyanci kaiyanci kada gaji Boolean hanci yin yin gaji kaiyanci:
var b1 = Boolean(""); //false - Kowane var b2 = Boolean("hello"); //true - Kowane kowa var b1 = Boolean(50); //true - Kowane Ɗan var b1 = Boolean(null); //false - Null var b1 = Boolean(0); //false - Zero var b1 = Boolean(new object()); //true - Ɗan
Number() hanci
Number() hanci yin yin gaji kai kuma yin yin kawu parseInt() da parseFloat() hanci kai kawu, kuma yin yin kawu kada gaji zai kai kada gaji, kuma yin yin kawu kada gaji.
Kan kada, kya parseInt() da parseFloat() hanci kawai yin yin kawu kada gaji kan yin yin hanci, kuma "1.2.3" kaiyanci yin yin kada gaji "1" da "1.2".
用 Number() 进行强制类型转换,"1.2.3" 将返回 NaN,因为整个字符串值不能转换成数字。如果字符串值能被完整地转换,Number() 将判断是调用 parseInt() 方法还是 parseFloat() 方法。
下表说明了对不同的值调用 Number() 方法会发生的情况:
用法 | 结果 |
---|---|
Number(false) | 0 |
Number(true) | 1 |
Number(undefined) | NaN |
Number(null) | 0 |
Number("1.2") | 1.2 |
Number("12") | 12 |
Number("1.2.3") | NaN |
Number(new object()) | NaN |
Number(50) | 50 |
String() 函数
最后一种强制类型转换方法 String() 是最简单的,因为它可把任何值转换成字符串。
要执行这种强制类型转换,只需要调用作为参数传递进来的值的 toString() 方法,即把 12 转换成 "12",把 true 转换成 "true",把 false 转换成 "false",以此类推。
强制转换成字符串和调用 toString() 方法的唯一不同之处在于,对 null 和 undefined 值强制类型转换可以生成字符串而不引发错误:
var s1 = String(null); //"null" var oNull = null; var s2 = oNull.toString(); //会引发错误
在处理 ECMAScript 这样的弱类型语言时,强制类型转换非常有用,不过应该确保使用值的正确。