基础知识
- 在加法中,boolean里面的true是1,false是0
console.log(true + 2) // 3
console.log(false + 2) // 2
var variable = undefined
console.log(variable + 'nicey') // undefinednicey
console.log(variable + 2) // NAN
console.log(variable + true) // NAN
console.log(null + 3) // 3
console.log(null + true) // 1
-
typeof 检测变量数据类型
-
转换为字符串
- toString() ,可用num.toString()
- String()强制转换 ,可用String(num)
- 加号拼接字符串 隐式转换 最常用
- 转换为数字型
- parseInt(变量) ,把字符串型的转换为整数数值型
console.log(parseInt('3.14')) // 3
console.log(parseInt('3.94')) // 3
console.log(parseInt('120px')) // 120
console.log(parseInt('rem120px')) // NAN
- parseFloat(变量) ,把字符串型的转换为浮点数数值型
console.log(parseFloat('3.14')) // 3。14
console.log(parseFloat('3.94')) // 3.94
console.log(parseFloat('120px')) // 120
console.log(parseFloat('rem120px')) // NAN
- 利用Number(变量)
console.log(Number('12'))
- 利用算术运算 - * /
console.log('12' - 0)
预解析
// 1问
console.log(num) // 报错
// 2问
console.log(num)
var num=10 // undefined
// 3问1
function fn(){
console.log(11)
}
fn() // 11
// 3问2
fn()
function fn(){
console.log(11)
}
// 11
// 4问1
var fun = function(){
console.log(22)
}
fun()
// 22
// 4问2
fun()
var fun = function(){
console.log(22)
}
// 报错
JS引擎运行是先预解析,再代码执行
预解析:JS引擎会把JS里面所有的声明变量和function提升到当前作用域的最前面
分为变量预解析(把所有的变量声明提升到最前面,不提升赋值操作)和函数预解析(把所有的函数声明提升到最前面,不调用函数)
// 4问2
fun()
var fun = function(){
console.log(22)
}
// 报错
可以写成以下形式
// 4问2
var fun
fun()
fun = function(){
console.log(22)
}
// 报错
案例说明: 经典面试题
f1()
console.log(c)
console.log(b)
console.log(a)
function f1(){
var a = b = c = 9
console.log(a)
console.log(b)
console.log(c)
}
可以改写为以下
function f1(){
// var a = b = c = 9 相当于var a = 9; b = 9; c = 9; 即b和c直接赋值,没有声明,当全局变量看
// 集体声明应该是var a = 9, b = 9, c = 9;
var a
a = b = c = 9
console.log(a)
console.log(b)
console.log(c)
}
f1()
console.log(c)
console.log(b)
console.log(a)
// 9
// 9
// 9
// 9
// 9
// 报错