补充笔记

113 阅读2分钟

基础知识

  1. 在加法中,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
  1. typeof 检测变量数据类型

  2. 转换为字符串

  • toString() ,可用num.toString()
  • String()强制转换 ,可用String(num)
  • 加号拼接字符串 隐式转换 最常用
  1. 转换为数字型
  • 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
// 报错