资讯专栏INFORMATION COLUMN

JavaScript 数据类型转换

waltr / 2250人阅读

摘要:数据类型转换原文链接是一种弱类型语言,即不需要明确声明变量的类型,可以随时赋予任意类型的值。强制转换显式转换强制转换主要指使用和三个构造函数,手动将各种类型的值,转换成数字字符串或者布尔值。如果该值不能完全转换为整型或浮点型,则返回。

JavaScript 数据类型转换

原文链接

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

强制转换(显式转换)

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

转换成 Boolean 值

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

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

Boolean(undefined)     // false
Boolean("")            // false
Boolean(null)          // false
Boolean("12345hello")  // true
Boolean({})            // true
转换成数字

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

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

原始类型有 5 种:UndefinedNullNumberBooleanString

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

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

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

如果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)          // 0
parseInt(0.0000001)         // 1
parseFloat(0.000001)        // 0.000001
parseFloat(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() 的参数是一个对象时,内部处理步骤如下:

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

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

如果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    // -1
2 - "3ab"  //NaN

数字与布尔值相加减会自动转换

3 - true    // 2
3 + true    // 4
参考资料

【文章】有趣的JavaScript隐式类型转换(推荐)

【文章】数据类型转换

【文章】JavaScript类型转换的迷糊事儿(推荐)

【文章】JavaScript 对象转换之toString、valueOf

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87896.html

相关文章

  • JavaScript核心语法——数据类型

    摘要:原始类型分别有类型类型和类型三种。类型中存在一个特殊的值叫。也可以把其他类型的数据自动转换为类型运算符运算符判断原始类型语法结构变量名称。 数据类型 1.数据类型的概述;在JavaScript代码中,能够表示并且操作值的类型就叫做数据类型数据类型可以分成可变类型和不可变类型,可变类型的值是可以修改的。相反不可变类型的值是不可以修改的。数据类型还有原始类型(原始值)与引用类型(内置对象)...

    wfc_666 评论0 收藏0
  • WebSocket系列之JavaScript中数字数据如何转换为二进制数据

    摘要:以和为例,说明中的数字数据如何转换为二进制数据。对象用来表示通用的固定长度的原始二进制数据缓冲区。中的数字数据如何转换为二进制数据对和有了一个大概的了解,下面让我们来看下它是如何进行二进制数据操作的。 概述 本文主要通过对JavaScript中数字数据与二进制数据之间的转换,让读者能够了解在JavaScript中如何对数字类型(包括但不限于Number类型)进行处理。 二进制数据在日常...

    MASAILA 评论0 收藏0
  • 数据类型 - Javascript语法基础 - Javascript核心

    摘要:在编程语言中,能够表示并操作的值的类型称做数据类型。中的原始类型包括数字,字符串和布尔值。日期与时间语言核心包括构造函数,用来创建表示日期和时间的对象。其规则为如果是布尔值,和分别被转换为和如果是数字值,返回本身。 源代码: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/Javas...

    sevi_stuo 评论0 收藏0
  • Front-end developmenter必看,超实用的javaScript隐式类型转换规则记忆

    摘要:下面先看看涉及到的几个函数以及他们的转换规则,这个是需要记忆的内容类型转换需要使用到的函数对于布尔值用到的是对于数值,用到的是当然还有但是对于隐式类型转换的时候,调用的是前者。 javaScript类型转换规则 javaScript的类型转换其实一直是很多前端开发人员很迷的地方,一会儿这里要转换,一会儿那里又要转换,总之就是一个大写的迷,因为它隐式类型转换的地方实在是太多了。 但其实...

    fuchenxuan 评论0 收藏0
  • WebSocket系列之字符串如何与二进制数据间进行互相转换

    摘要:总结通过使用和,我们能够在数据和二进制数据中进行互相转换。下一篇系列相关的博客,将会介绍如何通过来向后端传递二进制数据,以及如何处理通过收到的二进制数据。 概述 上一篇博客我们说到了如何进行数字类型(如Short、Int、Long类型)如何在JavaScript中进行二进制转换,如果感兴趣的可以可以阅读本系列第二篇博客——WebSocket系列之JavaScript中数字数据如何转换为...

    stackfing 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<