基本知识
类型之间的转换通过以下内置函数(原生函数)来实现:
1. String()
2. Number( )
3. Boolean( )
注意:前面没有new关键字;
抽象操作规则:
- toString规则 : 显示转换其他类型为字符串的规则
JOSN.stringify() 在转换字符串、数字、布尔值和null时的规则和toString基本相同。
基本值的类型转换规则为:null //"null" undefined // "undefined" true // "true"
对普通对象来说,除非自行定义,否则toString() ( Object.prototype.toString() ) 返回内部属性 [[Class]] 的值 ,如 String({}) 得到 "[object Object] " ,其中第一个object是固定的,第二个Object表示对象内部 [[Class]] 属性的值。
-
toNumber规则 :非数字转换成数字的规则
1. Number 转换对象时会先转换成相应的基本类型,调用内置的valueOf()或toString()方法得到返回值来进行强制转换。先调用valueOf 若不返回基本类型值,在调用 toString ,若还是没有返回基本类型值,产生TypeError错误。
2. 注意没有toNumber方法
3. 以下是常见的其他类型转换成数字的规则:Number(true) //1 Number(false) // 0 Number(undefined) //NaN Number(null) // 0 Number({ })//NaN Number([])//NaN Number("42px") //NaN 1 + undefined //NaN 1 + null //1
-
toBoolean规则:
以下列举出来的五个值是假值
:1. undefined 2. null 3. false 4. +0,-0,NaN 5. ""
除以上列举的值之外的其他值都是真值
,如 { } , [ ] , function( ){ } 等对象都是真值。
注意 : toBoolean是转换规则, 而Boolean是将其他类型值转换成布尔值的方法;
例:
Boolean(undefined) //false
Boolean(null) //false
Boolean(0) //false
Boolean("") //false
Boolean(false) //false
Boolean({}) //true
Boolean([]) //true
Boolean("0") //true
Boolean(1) //true
下面情况会发生布尔值隐式转换:遵循前面提到的toBoolean抽象操作规则。
1. if ( )
2. for(...; ...; ...),第二个判断表达式
3. while() ;do ..while()
4. ? : 三元运算符
5. 逻辑运算符 || 和 && 左边的操作数
- 逻辑运算符 :|| 和&&
或许 「逻辑运算符」 称呼为 「选择器运算符」 更准确!
它们的返回值是两个操作数中的一个; 即 a|| b,返回a或者b; 这和其他语言(C/ PHP)会返回布尔值不同。
例:
var a = 43;
var b = "ac";
var c = null;
a || b //43
a && b //"ac"
c || b // "ac"
c && b //null
其功能类似于三元运算符。
例:
a || b ===> a ? a : b
常用这个方法设置默认值:
function test (a,b){
a = a || 1
b = b || 2
console.log(a , b)
}
test() // 1,2
test(4,5) //4,5
a && b : a为b的守护运算符 ,a为true 返回b; 短路规则。
显示类型转换:
字符串与数字之间的转换:
- 将日期转换成数字只需在前面添加
+
号 :例 var timestamp = +new Date() ; - 与parseInt的不同点:Number(“42px”) == NaN 而 parseInt(“42px”) == 42
例:
Number(true) ; //1
Number([2]) //2
+true ; //1
+ "123" ; //123
String(43) // "43"
123.toString() // "123"
String([1,2]) // "1,2" ;
String({a:2.34}) // "[object Object]"
+Date.now() ; //1583563234264
+new Date(); //1583563234264
parseInt("42px") // 42 从第一位开始取,遇到非数字停下
parseFloat("43.8px") //43.8 从第一位开始取,遇到非数字和 . 时停下
显示强制转换成布尔值:
- !! : 取反在取反符号
- Boolean()
!! "" //false
!!"a" // true
!!null //false
!!undefined //false
!! 123 //true
!!{} //true
Boolean(null) //false
Boolean(undefined) //false
Boolean("0") //true
隐式转换
-
字符串与数字之间的转换:
例:
123 + "" // "123" 1+"3" // "13" 1+2 //3 [1,2]+[3,4] //"1,23,4" //先调用valueOf 不返回基本类型值,在调用 toString ,若还是无返回基本类型值,产生TypeError错误。 "3.14" - 0 //3.14