1.数据类型转换
显示转换 | 隐式转换 | |||
string | .toString | String | +’ ‘、+” “ | |
number | parseInt() | parseFloat() | Number() | +、-、*、/、% |
boolean | Boolean() | !! |
a.转字符串
//转string
var num = 123
// var str = num.toString()
// var str = String(num)
// + 连接字符串
var str = num + ""
console.log(typeof num)
console.log(typeof str)
var bool = true
// var boolStr = bool.toString()
// var boolStr = String(bool)
var boolStr = bool + ""
console.log(typeof bool)
console.log(typeof boolStr)
var undfin = undefined
// var undfinStr = undfin.toString() //Uncaught TypeError: Cannot read properties of undefined (reading 'toString')
// var undfinStr = String(undfin) //string
var undfinStr = undfin + ""
console.log(typeof undfinStr)
var nu = null
// var nuStr = nu.toString() //Uncaught TypeError: Cannot read properties of null (reading 'toString')
// var nuStr = String(nu) //string
var nuStr = nu + ""
console.log(typeof nuStr)
注意:“+”运算符,可以用来连接字符串
undefined和null不能使用.toString()
b.转数字
显式转换:
parseInt()取整数
parseFloat()保留小数
Number()
隐式转换:
+ - * / %
//注释
// var 变量=“” // 值 类型
//字符串转数字
var str = "123"
var numberStr = Number(str) //123 number
str = "123.12"
var numberStr = Number(str) //123.12 number
var parseIntNum = parseInt(str) //123 number
var parseFloatNum = parseFloat(str) //123.12 number
var str1 = "123.12px111"
var numberStr = Number(str1) // NaN number
var parseIntNum = parseInt(str1) // 123 number
var parseFloatNum = parseFloat(str1) // 123.12 number
// 隐式转换
var num = str*1 // 123 number
var num = str*1 // NaN number
// 其他转换类推
var num = +str1 // NaN number
// 布尔值转数字
var bool = true
var bool2 = false
var numBool = Number(bool) // 1 number
var numBool2 = Number(bool2) // 0 number
var numBool = parseInt(bool2) // NaN number
var numBool = bool*1 // 1 number
// undefined 转数字
var unif = undefined
var numBool = Number(unif) // NaN number
var numBool = parseInt(unif) // NaN number
var numBool = unif*1 // NaN number
// null 转数字
var nu = null
var numnu = Number(nu) // 0 number
var numnu = parseInt(nu) // NaN number
var numnu = nu*1 // 0 number
注意:parseInt()取字符串整数,parseFloat()取小数(从左向右取所有数字,直到最后一个不是数字为止)
c.转布尔
显示转换:Boolean()
隐式转换:!!
var str = "12px"
var BooleanStr = Boolean(str) // true boolean
str = ""
var BooleanStr = Boolean(str) // false boolean
str = "0"
var BooleanStr = Boolean(str) // true boolean
console.log(BooleanStr)
console.log(typeof BooleanStr)
// 数字转布尔值
var number = 123
var BooleanNum = Boolean(number) // true boolean
number = 0
var BooleanNum = Boolean(number) // false boolean
number = -0
var BooleanNum = Boolean(number) // false boolean
number = -123
var BooleanNum = Boolean(number) // false boolean
number = NaN
var BooleanNum = Boolean(number) // false boolean
number = Infinity // 正无穷
var BooleanNum = Boolean(number) // true boolean
console.log(BooleanNum)
console.log(typeof BooleanNum)
// undefined转布尔值
var unde = undefined
var BooleanUnde = Boolean(unde) // false boolean
console.log(BooleanUnde)
console.log(typeof BooleanUnde)
// null转布尔值
var nu = null
var BooleanNu = Boolean(nu) // false boolean
console.log(BooleanNu)
console.log(typeof BooleanNu)
// 隐式转换 !! 一个感叹号代表取反,两个感叹号代表取正
console.log(!unde)
console.log(typeof !!unde)
注意:0、-0、NaN、" "、undefined、null转布尔值全部为false
一个感叹号取反,两个感叹号取正
2.运算符
算术运算符 + - * / % ++ --
比较运算符 > < == >=
逻辑运算符 && || !
赋值运算符 = += -= *= /= %=
三元运算符 条件 ? 语句1 : 语句2
a.算术运算符 ++ -- 问题
var i =1
// var res = i++ // 先赋值,再加1
// var res = ++i // 先加1,再赋值
// console.log(i)
// console.log(res)
var res = i++ - ++i
/*
思路:
var r = i++
r = 1
i = 2
var rr = ++i
rr = 3
var res = r - rr
*/
console.log(res) // -2
i-- // 减1
b.比较运算符
var res
res = 1 > 2 // false
res = 2 > 1 // true
res = 2 == 2 // true
res = "1" < "2" // true
res = "12" > "2"// false
// 思路:字符串情况下,从左往右比较,
res = "a" > "b" // false
// 比较 ascii对应的值
res = "12" > 2 // true
// js解释器 ,它会自动将字符串转成数字进行比较
// >= <= !=
res = 13 >= 12 // true
res = 12 >= 12 // true
// !=
res = 12 != 13 // true
res = 12 != 12 // false
注意: = 赋值 == 相等 === 恒等
== 效率低于 === 因为==需要在底层转换一下数据类型
字符串的数字比较大小,从左往右比较
字符串比较ascii码下标
c.逻辑运算符 && || !
// && 两边条件 转布尔值的时候为true
res = false && true // false
res = 1 && true // true
// || 只要有一个条件满足转布尔值为true的情况下,它就通过(true)
res = false || true
// ! 取反,转为布尔值
res = !0
console.log(res)
d.赋值运算符
var num = 1
num += 1 // num = num + 1
num -= 1 // num = num - 1
num *= 1 // num = num * 1
num /= 1 // num = num / 1
num %= 1 // num = num % 1
console.log(num)
var i = "1"
i+=1 // i = "1" + 1 11
console.log(i)
i++ // 2 i++ 是将字符串转成数字再运算
console.log(i)
注意: +=1 和 ++ 的区别