js的数据范例转换

打印 上一主题 下一主题

主题 1009|帖子 1009|积分 3027

强制转换

所谓强制转换就是使用Number()、String()、Boolean等方法举行强制转换
  1. console.log(Number('886'));     // 886
  2. console.log(Number('ui886'));       // NaN
  3. console.log(String(123456));        // '123456'
  4. console.log(String(false));     // 'false'
  5. console.log(Boolean(1));        // true
  6. console.log(Boolean('false'));      // true
复制代码
引用数据范例的转换过程

这三种方法都有各自的转换过程


  • Number()
    在对于引用数据范例时,会举行两部操纵
    先辈行valueOf()方法,若还无法直接转换,则再执行toString()方法,此时若还无法得到可以转换为数值的值则返回NaN
    如下:
  1. const a = {
  2.     m: 'abc'
  3. };
  4. console.log(Number(a)); // NaN
复制代码
让我们改写这两个方法
  1. const a = {
  2.     m: 'abc',
  3.     valueOf() {
  4.         return 3;
  5.     },
  6.     toString() {
  7.         return 5;
  8.     }
  9. };
  10. console.log(Number(a)); // 3
复制代码
可以看到再执行valueOf方法时已得到了须要的number数据范例的值,以是直接返回了,会跳过toString的执行
  1. const a = {
  2.     m: 'abc',
  3.     toString() {
  4.         return 5;
  5.     }
  6. };
  7. console.log(Number(a)); // 5
复制代码
当valueOf方法也无法得到数值范例数据,才会执行toString方法


  • String()
    与Number()类似,但是转换引用数据范例是先执行toString方法再执行valueOf方法,最后还是引用数据范例就会返回'[object Object]'
    如下:
  1. const a = {
  2.     m: {}
  3. };
  4. console.log(String(a)); // '[object Object]'
复制代码
以下代码可以看出,先执行的是toString方法
  1. const a = {
  2.     m: {},
  3.     valueOf() {
  4.         return 'ww';
  5.     },
  6.     toString() {
  7.         return 'aa';
  8.     }
  9. };
  10. console.log(String(a));  // 'aa'
复制代码


  • Boolean()
    它的转换规则相对简单:除了以下五个值的转换结果为false,其他的值全部为true。

    • undefined
    • null
    • 0(包含-0和+0)
    • NaN
    • ''(空字符串)

自动转换

js本身是弱范例的语言,赋值时可以是任意数据范例,以是经常会出现不同数据范例的数据举行运算的情况
自动转字符串

  1. console.log('123' + 123);       // '123123'
  2. console.log('123' + true);      // '123true'
复制代码
使用加号运算时,存在字符串时会变成字符串拼接,其他范例的数据就会自动转为字符串数据范例,而如果其他的数据范例为引用数据范例是,就会强制转换,即使用String()
  1. console.log('123' + {});  // '123[object Object]'
  2. console.log('123' + []);  // '123'
  3. console.log('123' + [1, 2, 3]);  // '1231,2,3'
复制代码
  数组与对象不同,当数值只有一个值或空数组时,强制转换会变为谁人值的字符串或空字符串,若有多个值时,逗号也会加入转换
  自动转数值

除了加法运算符,其他运算符基本都会把其他数据自动转换为数值范例
  1. console.log('123' - '12');  // 111
  2. console.log(true * '12');   // 12
  3. console.log('45' / 5);  // 9
  4. console.log('2' ** 2);  // 4
复制代码
  注意: null转为数值时为0,而undefined转为数值时为NaN。
  NaN与任何数值运算都为NaN
碰到转换不了的结果就会是NaN
  1. console.log('abc123' - '12');  // NaN
  2. console.log(+'aaa');   // NaN
  3. console.log(-null);  // -0
复制代码
自动转布尔值

JavaScript 碰到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean()函数。
因此除了以下五个值,其他都是自动转为true。


  • undefined
  • null
  • +0或-0
  • NaN
  • ''(空字符串)
总结

js的数据范例转换分为两种,强制转换与自动转换


  • 自动转换

    • 当不同数据范例之间举行相互运算,或者当对非布尔范例的数据求布尔值的时间,会发生隐性转换。
    • 预期为数字的时间:算术运算的时间,我们的结果和运算的数都是数字,数据会转换为数字来举行计算。
    • 预期为字符串的时间:如果有一个操纵数为字符串时,使用+符号做相加运算时,会自动转换为字符串。
    • 预期为布尔的时间:前面在先容布尔范例时所提到的 9 个值会转为 false,别的转为 true

  • 强制转换

    • 强制将一种范例转换为别的一种范例。强制转换往往会使用到一些转换方法。常见的转换方法如下:
    • 转换为数值范例:Number(),parseInt(),parseFloat()
    • 转换为布尔范例:Boolean()
    • 转换为字符串范例:toString(),String()
    固然,除了使用上面的转换方法,我们也可以通过一些快捷方式来举行数据范例的强制转换,如下:
       

    • 转换字符串:直接和一个空字符串拼接,例如:a = "" + 数据
    • 转换布尔:!!数据范例,例如:!!"Hello"
    • 转换数值:数据*1 或 /1,例如:"Hello * 1"


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表