JavaScript类型转换
JS识别数据类型函数——typeof()
typeof()可以识别数据类型,比如typeof(“123”),就会输出string
六种数据类型:number、string、boolean、object([]、null)、undefined、function
不定义直接使用变量,只有typeof()才可以。返回字符串"undefined"
console.log(typeof(a))
console.log(typeof(typeof(a)))
输出:undefined string
JS显式类型转换
1、Number()
console.log(Number("abc"),Number(true),Number(false),Number(undefined),Number(null))
console.log(typeof(NaN))
输出:NaN 1 0 NaN 0
输出:number
【知识】NaN代表not a number,但它本身是一个number类型
2、parseInt(string,radix) 和 parseFloat()
console.log(parseInt("123"),parseInt("123.4abc456"),parseInt(true),parseInt(undefined),parseInt(null))
console.log(parseFloat("123"),parseFloat("123.4abc456"),parseFloat(true),parseFloat(undefined),parseFloat(null))
输出:123 123 NaN NaN NaN
输出:123 123.4 NaN NaN NaN
console.log(parseInt(1001,2)) //2代表这个数是二进制,转化为十进制
输出:9 (二进制1001 是十进制9)
3、String() 和 .toString(radix)
console.log(String(123),String(true),String(false),String(undefined),String(null))
var num = 10;
输出:123 true false undefined null
var num = 10;
console.log(num.toString())
console.log(num.toString(2)) //将一个十进制的数,转化为任意进制
输出:10
输出:1010
【注意】.toString()不可以转换undefined和null
【思考】如何把一个二进制(1010)转化为十六进制
var n = 1010;
var intN = parseInt(n,2);
console.log("二进制:",n,"十进制:",intN,"十六进制:",intN.toString(16))
输出:二进制: 1010 十进制: 10 十六进制: a
思路:先把二进制转化成十进制,再把十进制转化为二进制
JS隐式类型转换
++ -- + -加加、减减、正、负 number
+ 加 number/string
- * / % 减、乘、除、求余 number
< > <= >= 小于、大于、小于等于、大于等于 number
== != 等于、不等于 number
在进行一些字符串和数字运算时,会隐式类型转换
字符串数字(如字符串"123"),和数字进行上面运算,除了加号,一般都会转换成数字进行运算。
特殊的是,数字+字符串进行的是字符串链接。
非数字字符串(如字符串"abc")- 数字结果为 NaN;
var str1 = "1",
str6 = "6"
stra = "a",
num1 = 1,
num6 = 6;
console.log(str6-num1,str6-str1,stra+num1,++str1)
console.log(1=="1",1==="1",str6>num1)
输出:5 5 NaN “a1” 2
输出:true false true
===
是全等于,不进行隐式类型转换的进行比较。
两个小案例:
if(typeof(a) && -true + (+undefined) + ""){
document.write("扎实")
}
解析:“undefined”&& -1 + 0 + “” => “undefined”&&"-1"
if(11 + "11" * 2 == 33){
document.write("扎实")
}
解析:11 + 22 == 33 先算乘除,再算加减