美文网首页
js类型转换

js类型转换

作者: 清平乐啊 | 来源:发表于2023-01-30 15:42 被阅读0次

该文章记于2023年1月06日

一、基本类型转换(Number,String,Boolean)

1.Number,parseInt,parseFloat,Math.floor,Math.ceil,一元运算符+,(>,<,<=,>=),(|,&,^,~),(==,!=)

+'2' //2
+true // 1
+null // 0
+undefined // NaN
+NaN // NaN
+{} // NaN
+'' // 0
+' ' // 0
+[] // 0
Number() // 0

2.String,toString,toFixed(),toExponential(),toPrecision()

String能将null和undefined转换成字符串形式,toString则报错


用例图片1
String({}) // [object Object]
String([]) // '' //空串
String() // ''
String('')  // ''

3.Boolean,!,||,&&

False:空串,数字0,null,undefined,NaN
True:symbol,有一个空格的字符串,字符串0,字符串false,数字1,字面量{}/[]
字符串:除了空串,其他字符串转换成布尔值都是true
数字:除了数字0,其他数字布尔值为true
!转换成相反的布尔值
注:||和&&转换布尔值,最终返回的是原值而不是bool值

let x = 'hello' && 123;   // x === 123

二、对象类型转换

任何非基本类型值总是转换成true
对象值转换成数字或字符串有专用内置属性[[ToPrimitive]]
对象值转换主要使用定义在Object.prototype上的valueOftoString两种方法
运算规则:

  • 1.输入值本就是基本类型,不转换,直接返回;
  • 2.调佣toString()方法,结果是基本类型,返回;
  • 3.调用valueOf(),结果是基本类型,返回;
  • 4.toString()valueOf()都无法得到基本类型值,抛出错误TypeError
    注:数值先调用valueOf(),返回值再调用toString();字符串则相反先toString()valueOf()
    大多数内置类型没有valueOf()方法,因此转换成数值和转换成字符串最后都是调用toString()
    ToPrimitive

三、注意事项

1.特殊类型

(1)symbol

symbol只能显示转换,不支持隐式转换,隐式转换会报错:TypeError
symbol无法转换成数字,抛出TypeError错误

(2)字符串-->数字

引擎都会先去除字符串起始和末尾的空白,比如\n \t,去除空表后,字符串无法转换成数字时,则返回NaN

2.特殊规则

(1)null,undefined,==

null/undefined只与null和undefined等,且==两边操作数不转换成数字

20=='20' // 字符串20转成数字20
false=='' // 空串转换成布尔值为false

当==两个操作数都是字符串时,操作数都不转换成数字
==转换数组为数值时,数组先执行valueOf(),返回数组本身,再执行toString(),相当于执行数组的join()方法,将数组拼接成字符串

(2)NaN

NaN不与任何值等

(3)+(加),>,+(一元操作符)

+(加)运算顺序是从左到右
+(加)将字面量[]转成空串''
数组和对象的valueOf()方法返回对象本身,因此被忽略

“number” + 15 + 3 
--> "number15" + 3 
--> "number153"

[] + null + 1  
-->  '' + null + 1  
-->  'null' + 1  
--> 'null1'

{}+[]+{}+[1]
// +所有操作数都是非基本类型,第一个{}处理成块声明语句,不是声明对象的字面量,因此第一个{}被忽略,不转换
--> +[]+{}+[1]
--> 0 + {} + [1]
--> 0 + '[object Object]' + [1]
--> '0[object Object]' + [1]
--> '0[object Object]' + '1'
--> '0[object Object]1'

[1] > null
--> '1' > 0
--> 1 > 0
--> true

"foo" + + "bar" 
--> "foo" + (+"bar") 
--> "foo" + NaN 
--> "fooNaN"

(new Date(0)).valueOf() // 0

四、其他

除null和undefined外,所有值都有toString()方法,结果与String()方法一致
+(加)符号转换优先级顺序:

  • 1.操作数都是非基本类型,使用[ToPrimitive]转换成基本类型
  • 2.其中一个操作数是string(字符串),另一个操作数转换成字符串进行运算
  • 3.以上都不是,俩操作数都转成数字进行运算

参考文献

JavaScript Type Conversions
JavaScript-Equality-Table
JavaScript type coercion explained
JavaScript Type Conversions Explained

……待完善

相关文章

  • javaScript中数据类型转换方法

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • 数据类型转换

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • JavaScript类型转换

    在js中数据类型转换一般分为两种,即强制类型转换和隐式类型转换(利用js弱变量类型转换)。 强制类型转换 即通过使...

  • 前端开发入门到实战:JavaScript字符串转换数字

    js 字符串转换数字方法主要有三种: 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供...

  • 前端开发入门到实战:JavaScript字符串转换数字

    js 字符串转换数字方法主要有三种: 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供...

  • js中的类型转换

    在js中数据转换分为3种:隐式类型转换,强制类型转换,函数转换 1.隐式类型转换 (1):运算符转换 js中的值在...

  • JS类型转换

    方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了parseInt()...

  • js关于字符串和数字的转换

    js字符串转换成数字 js 字符串转换数字方法主要有三种:转换函数、强制类型转换、利用JS变量弱类型特点进行转换 ...

  • JavaScript字符串转换数字

    这里记录js 字符串转换数字的三种主要方法: 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: ...

  • JS字符串与数字的相互转换 的3种方式

    转换函数、强制类型转换、利用JS变量弱类型特点进行转换 js字符串转数字# 1. 转换函数## 只有对String...

网友评论

      本文标题:js类型转换

      本文链接:https://www.haomeiwen.com/subject/jlsjcdtx.html