转成字符串 String

1. 使用 toString方法

这种方法可以将 number, boolean, objectarray,function 转化为字符串,但是无法转换 null, undefined 这两种数据类型。

(1).toString() // "1"

true.toString() // "true"

var obj = {}
obj.toString() // "[object Object]" null.toString() // Uncaught TypeError: Cannot read property 'toString' of null undefined.toString() // Uncaught TypeError: Cannot read property 'toString' of undefined // 数组
[1, 2, 3].toString() // "1, 2, 3" // 函数
var fn1 = function(){console.log('hello')}
fn1.toString() // "function(){console.log('hello')}"

2. 使用 String() 函数

String函数可以将任意类型的值转化成字符串。

原始类型值转换:

String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"

String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。

String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"

String方法背后的转换规则

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

3. 连接一个空字符串 (推荐)

1000 + ''     // "1000"

null + ''     // "null"

undefined + '' // "undefined"

true + ''      // "true"

obj + ''       // "[object Object]"

[1,2,3] +  ''  // "1,2,3"

转成数字 Number

1. 使用 Number() 函数

// 数值:转换后还是原来的值
Number(324) // 324 // 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324 // 字符串:如果不可以被解析为数值,返回 NaN
Number('324abc') // NaN // 空字符串转为0
Number('') // 0 // 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0 // undefined:转成 NaN
Number(undefined) // NaN // null:转成0
Number(null) // 0 Number({}) // NaN

Number方法的参数是对象时,将返回NaN,除非是包含单个数值的数组。

Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5

Number 背后的转换规则

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

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

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

举个例子:

var obj = {x: 1};
Number(obj) // NaN // 等同于
if (typeof obj.valueOf() === 'object') {
Number(obj.toString());
} else {
Number(obj.valueOf());
}

2. 使用 parseInt() 函数

parseInt() 函数解析一个字符串参数,并返回一个指定进制的整数

// 语法,第二个参数是数值的进制,数值范围是2 - 36之间
parseInt(string, radix);
parseInt('123') // 123
parseInt(' 81') // 81
parseInt(1.23) // 1
parseInt('15px') // 15
parseInt('011') // 11
parseInt('1e+21') // 1 // 进制转换
parseInt(021, 8); // 15,按8进制转换
parseInt("0xF", 16); //15, 按16进制转换
parseInt("1111", 2); //15, 按2进制转换

parseInt转换规则:MDN parseInt阮一峰教程-数值

  • 如果字符串头部有空格,空格会被自动去除。

  • 如果parseInt的参数不是字符串,则会先转为字符串再转换。

  • 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。

  • 如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN

  • 如果字符串以0x0X开头,parseInt会将其按照十六进制数解析。

  • 如果字符串以0开头,将其按照10进制解析。

  • 对于那些会自动转为科学计数法的数字,parseInt会将科学计数法的表示方法视为字符串,因此导致一些奇怪的结果。

    • parseInt(1000000000000000000000.5) // 1
      // 等同于
      parseInt('1e+21') // 1 parseInt(0.0000008) // 8
      // 等同于
      parseInt('8e-7') // 8

3. 使用 parseFloat() 函数

parseFloat方法用于将一个字符串转为浮点数。

parseFloat('3.14') // 3.14

// 如果字符串符合科学计数法,则会进行相应的转换。
parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14 // 如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分
parseFloat('3.14more non-digit characters') // 3.14 // parseFloat方法会自动过滤字符串前导的空格
parseFloat('\t\v\r12.34\n ') // 12.34 // 如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN。
parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN

阮一峰教程-parseFloat

4. 减零 x - 0

这是一种最简单快捷的方法,字符串减去一个0可以转换成数字

'1' - 0 // 1

'a' - 0 // NaN

'01AB' - 0 // NaN

5. 取正 + x

+ '1' // 1
+ '-1' // -1
+ 's' // NaN
+ '1s' // NaN
+ obj // NaN

转成布尔类型 Boolean

除了值是 null, undefined, 0, NaN, ''(空字符串) 转成 false 外,其它的全部都是 true

1. 使用 Boolean()函数

Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false Boolean({}) // true
Boolean([]) // true

2. 使用 !! 连续两次取反 (推荐)

!!1 // true

!!null // false

!!undefined // false

!!obj // true

!!'s' // true

JS 中的数据类型转换的更多相关文章

  1. js中json数据简单处理(JSON.parse()和js中嵌套html)

    js中json数据简单处理(JSON.parse()和js中嵌套html) 一.总结 1.html中嵌套js:<script>js代码</script> 2.js中嵌套html ...

  2. JS 里的数据类型转换

    JS的数据类型转换 一.js中的数据类型Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 1.Number Number数据类型指 ...

  3. 02.JS数据类型与数据类型转换

    前言:   学习一门编程语言的基本步骤 (01)了解背景知识 (02)搭建开发环境 (03)语法规范 (04)常量和变量 (05)数据类型 (06)数据类型转换5.数据类型——datatype  数据 ...

  4. Js中JSON数据交换使用总结

    Json格式简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是JavaScript原 ...

  5. C语言中强制数据类型转换(转)

    原文地址不详 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255(有些 ...

  6. Java中的数据类型转换

    先来看一个题: Java类Demo中存在方法func0.func1.func2.func3和func4,请问该方法中,哪些是不合法的定义?( ) public class Demo{ float fu ...

  7. 分享一个在js中判断数据是undefined,NaN,null,的技巧

    教大家如何在js中判断一个值是否是undefined,null,NaN,以及如何单独判断 平常开发过程中大家可能遇到一种问题,就是取页面某个值的时候获取不到这个var就是undefined了,如果是数 ...

  8. matlab中图片数据类型转换uint8与double

    matlab中处理图像像素点数据: img1=double(imread('lenna.bmp')); matlab中imshow图片,要先转换成uint8: subplot(1,2,1),imsho ...

  9. Struts2中的数据类型转换

    Struts2对数据的类型转换 一.Struts2中自带类型转换拦截器 Struts2内部提供了大量转换器,用来完成数据类型转换的问题,有如下 * boolean 和 Boolean * char和 ...

随机推荐

  1. js switch case注意事项

    今天写switch的时候发现没有达到预期效果,参照w3school的写法发现语法一致 想了一下,js是弱类型语言,是不是不支持number?试了一下将数字改为字符串,果然可以了 或者可以这样写:swi ...

  2. IBM MQ + WebSphere + Spring JMS配置方法

    IBM MQ + WebSphere + Spring JMS配置方法  首先要在WAS里面配置IBM MQ作为JMS消息的提供者,在WAS管理控制台: Resources->JMS Provi ...

  3. MacOs安装mysql与修改root密码

    1.下载安装包 http://www.mysql.com/downloads/ 找到如下内容下载 mysql-5.7.21-1-macos10.13-x86_64.dmg下载地址是 https://c ...

  4. 20172325 2017-2018-2 《Java程序设计》第十周学习总结

    20172325 2017-2018-2 <Java程序设计>第十周学习总结 教材学习内容总结 1.集合与数据结构 集合是一种对象 集合按照保存类型来看可以分为两种: (1)同构集合:只能 ...

  5. 我对于UI设计这个领域的理解

    User Interface(UI),包括三部分用户.界面以及用户与界面之间的交互关系.UI设计则是指对软件的人机交互.操作逻辑.界面美观的整体设计. 如何看待UI设计这个领域? 任何一个行业的出现都 ...

  6. linux永久关闭防火墙

  7. 设计社区类Web原型制作分享-Behance

    Behance 是著名设计社区,创意设计人士可以展示自己的作品,发现别人分享的创意作品. 网站有二级导航,主要用到的交互组件有弹出面板,通过弹出面板来隐藏展现搜索框.并且用到的组件有播放器.菜单栏.下 ...

  8. activemq.bat 在window7 x64下启动(安装)报错解决方案

    在启动  apache-activemq-5.15.2/activemq.bat  时候报错,提示以下信息: wrapper | --> Wrapper Started as Consolewr ...

  9. tp5月统计的bug

    月统计求和时 本月第一天没有统计到

  10. gridcontrol 图片列异步加载

    在gridview中指定一列,将ColumnEdit设置成pictureEdit 在使用showDialog这里窗体后,需要frm.Dispose()将资源释放 1.将该列的UnboundType属性 ...