研究一下JS的转型函数

JS五种基本数据类型:Null Undefined Boolean Number String。
外加一种复杂数据类型:Object。
转型函数,我的理解就是将一个数据类型按照一定的转换规则转换成与该转型函数对应的数据类型。
Boolean( )转化为Boolean。
Number() parseInt() parseFloat()转化为Number。
String() toString()转化为String。
理论上可以作用于任何的数据类型,但toString会例外。
我会疑问这些转型函数来自哪里。
他们大多来自全局对象。
JavaScript 代码引用 parseInt() 函数时,它引用的是全局对象的 parseInt 属性。
全局对象是作用域链的头,还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性。
因为全局对象的属性不可枚举所以我们在全局对象找不到以上的转型函数。
当你用他的时候当他是全局对象的属性就好。
有个例外就是toString()方法,这个是来自Object.
Boolean()转换规则:
被转换类型 值 转换后的值
Null null false
Undefined undefined false
Boolean true true
Boolean false false
String 非空字符串 true
String “” false
Number 非0的数字值,无穷大 true
Number 0 NaN false
Object 非空对象 true
Object null false
布尔值的转换规则还是比较简单的。
Number()转换规则:
被转换类型 规则
Null 0
Undefined NaN
Number 原路返回
Boolean true - 1;false - 0
String 只含有数字的字符串 “123”→ 123
含有浮点格式的纯数字字符串“1.23”→ 1.23
16进制的字符串”0xA” → 10;
空字符串“”→0;
开头有0的字符串“012” →12
“00012”→12
除了16进制。其他形式的头部有0的字符串会被忽略。所以识别不了8进制数。
含有以上规则以外的字符串 “abc” → NaN
“12e10” →NaN 不识别科学计数法
”1.23.45“→NaN
”12abc”→NaN
由于Number()在识别字符串上太鸡肋了。你看,总有些易识别的字符串都被打成NaN了。
所以识别字符串上主要用parseInt parseFloat 。
parseInt()转换规则:
看到函数名就知道,是把不同数据类型转换成数字类型的整数形式。
从左到右开始查找,会忽略空格,找到一个非空的字符。假如第一个非空字符不是数字或者负号。那么直接转化NaN ” ab12” → NaN
“” →NaN (和Number()不一样的地方
如果幸运遇到了第一个非空为数字或者负号,那么会继续识别第二个字符,依照这样一直查找到所有后续字符直到遇到非数字字符。
例如 “123abc” →123 “12 12”→12
“1.23”→1 说明不识别浮点数(和Number()不一样);
“10e12”→10也不识别科学计数法
还能识别各种整数格式(10 8 16进制)。能识别8 16进制 说明parseInt不会忽略0(和Number()不一样的地方
例如:”0xA”→10;
”070“ →56;
”70“ →70;
注意ES3标准:”070“→56 可识别8进制
ES5标准:”070”→ 70不可识别8进制(和Number()一样)
为了解决这些标准问题。parseInt支持第二个参数。
例如:parseInt(“0xA”, 16);→10
parseInt(“070”, 8); →56
parseInt(“070”, 10);→70
当使用这个函数的时候最好带上第二参数,以避免以后代码不必要的误会
parseFloat()转换规则:
字面意思:把被转换的数据类型转换成数字类型的浮点形式。
规则有点类似parseInt.从左往右找第一个非空的数字或者负号的字符,知道遇到一个无效的浮点数字字符为止。也就是说可以识别浮点。“1.23”→1.23(和parseInt()不一样);
但是值识别第一个浮点。后面的会忽略。”1.23.45”→1.23;
另外parseFloat会忽略0.而且非常强迫症只能解析10进制。16进制则会始终解析为0;
例如:“070”→70
“0xA” →0
”0520“→520
由于这个特性所以这个函数不支持第二个参数。因为只能识别一种进制嘛。
另外注意的是。”12e5” →1200000;可以识别科学计数法这是Number() parseInt()办不到的
还有 Number(object).会跟其他基本数据类型不同。会先调用valueOf()方法,然后得到返回的值,Number()规则对这个值进行解析,如果解析结果是NaN.则在调用一次toString()方法,再次依照前面的规则返回字符串的值。
但是parseInt 和parseFloat 对对象进行解析和Number()不一样。这两个函数针对字符串解析所以只会调用对象的toString()方法。

toString()转换规则:
前面已经提到过这个方法。这个方法是在Object上定义的,因为所有对象源于Object.所有所有对象都有这个方法。除了null undefined 这两个数据类型不是数据类型的对象。没有这个方法。
这个方法唯一工作返回相应的字符串表现。
var age = 11;
age.toString()→”11”;
var boo = true;
boo.toString()→”true”;
注意:转换数字的时候可以传入参数,指定转换数字的进制。
比如:var age = 10;
age.toString(10)→”10”;
age.toString(8)→”12”;
age.toString(16)→”a”;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值