博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 数据类型转换
阅读量:5780 次
发布时间:2019-06-18

本文共 2622 字,大约阅读时间需要 8 分钟。

JavaScript 数据类型转换


JavaScript 是一种弱类型语言,即不需要明确声明变量的类型,可以随时赋予任意类型的值。

强制转换(显式转换)

强制转换主要指使用Number()String()Boolean() 三个构造函数,手动将各种类型的值,转换成数字、字符串或者布尔值。

转换成 Boolean 值

Boolean( [value] ) 根据 value 的值返回一个布尔值

返回 false 的 value 值(共6种): false、""(空字符串)、0、NaN、null、undefined

Boolean(undefined)     // falseBoolean("")            // falseBoolean(null)          // falseBoolean("12345hello")  // trueBoolean({})            // true

转换成数字

Number(arg) 把给定的值(任意类型)转换成数字(可以是整数或浮点数),它转换的是整个值,而不是部分值,和 parseInt()parseFloat()不一样。如果该值不能完全转换为整型或浮点型,则返回NaN。

Number("123.1.2.3")       // NaNparseInt("123.1.2.3",10)  // 123parseFloat("123.1.2.3")   // 123.1Number("123.1")           // 123.1Number(true)              // 1Number(null)              // 0Number(undefined)         // NaN

原始类型有 5 种:UndefinedNullNumberBooleanString

当 Number() 的参数是一个对象时,内部处理步骤如下:

  1. 调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,不再进行后续步骤。

  2. 如果valueOf方法返回的还是对象,则改为调用对象自身的toString方法。如果返回原始类型的值,则对该值使用Number函数,不再进行后续步骤。

  3. 如果toString方法返回的是对象,就报错。

var obj = {name:"percy",age:21};Number(obj);// 等同于var obj = {name: "percy", age:21 };if (typeof obj.valueOf() === 'object') {  Number(obj.toString());} else {  Number(obj.valueOf());}

parseInt 和 parseFloat 都是全局函数,不属于任何对象

parseInt(string, radix);

  • 将给定的字符串以指定基数(radix/base)解析成为整数,字符串开头的空白符将会被忽略,它是逐个对字符进行解析的。

parseInt("  123 Hello",10)   // 123

parseFloat(string)

  • 将参数中指定的字符串解析成为一个浮点数字并返回,它也是逐个对字符进行解析的

parseFloat(" 1.2.3.sds")     // 1.2

下面来跳一个坑:

parseInt(0.000001)          // 0parseInt(0.0000001)         // 1parseFloat(0.000001)        // 0.000001parseFloat(0.0000001)       // 1e-7

JavaScript 中精度小于0.000001的数字会自动转化为科学计数的字符串

转换成字符串

  • String() 可以把 nullundefined 转换为字符串,而用 toString() 转换的话,会报错

  • null 和 undefined 没有 toString() 方法,会报错

所有的对象都有toString()方法,作用就是返回一个反映这个对象的字符串。下面列出了一些:

  • Object.prototype.toString()

  • Number.prototype.toString()

  • RegExp.prototype.toString()

  • Function.prototype.toString()

  • ······

String(null)          // "null"String(12+11+true)    // 24(12).toString()       // "12"(10).toString(16)     // "a"

当 String() 的参数是一个对象时,内部处理步骤如下:

  1. 先调用对象自身的toString方法。如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤。

  2. 如果toString方法返回的是对象,再调用valueOf方法。如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤。

  3. 如果valueOf方法返回的是对象,就报错。

String({name: "percy",age: 21})               // "[object Object]"// 等同于String(({name: "percy",age: 21}).toString())  // "[object Object]"

隐式转换

  • 将任何数据转换为数字的最简单办法就是 对它进行“一元加”运算

+ "12"    // 12+ "a12"   // NaN+ true    // 1
  • 字符串和数字相加结果是字符串

2 + "3"     // "23""2" + 3     // "23"2 + "3ab"   // "23ab"
  • 字符串和数字相减结果是字符串

2 - "3"    // -1"2" - 3    // -12 - "3ab"  //NaN
  • 数字与布尔值相加减会自动转换

3 - true    // 23 + true    // 4

参考资料

  • 【文章】(推荐)

  • 【文章】

  • 【文章】(推荐)

  • 【文章】

转载地址:http://mouyx.baihongyu.com/

你可能感兴趣的文章
DHCP与BOOTP有什么区别
查看>>
电子书下载:Pro ASP.NET MVC 3 Framework 3rd Edition
查看>>
哎,累死了 加班加到八点半才解决问题
查看>>
MATLAB Builder for .NET
查看>>
C#生成唯一码方法
查看>>
Windows mobile 开发入门—环境搭建(转)
查看>>
Caused by: java.lang.OutOfMemoryError: Java heap space解决方案
查看>>
DM365视频处理流程/DM368 NAND Flash启动揭秘
查看>>
elasticsearch与mongodb分布式集群环境下数据同步
查看>>
设置dbgrideh可显示的列
查看>>
《高性能网站建设指南》(High Performance Web Sites)非官方技术支持
查看>>
SQL 数据库开发一些精典的代码
查看>>
同城购
查看>>
在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService
查看>>
WPF快速入门系列(2)——深入解析依赖属性
查看>>
《程序员自我修养》阅读笔记-编译和链接
查看>>
How to make apq8084
查看>>
集群Cluster介绍
查看>>
艾伟_转载:学习 ASP.NET MVC (第一回)理论篇
查看>>
艾伟也谈项目管理,敏捷个人:内容框架之执行力
查看>>