1.bind相关用法
fun.bind(obj)将obj传入fun作为其作用域
fun.bind将返回一个新的函数地址,fun.bind(obj)!=fun.bind(obj)
反复bind只有第一次有效
转载注明http://www.cnblogs.com/billyrun/p/6597250.html
2.js中的真值
0 , “” , null , undefined , false , NaN转为boolean都是false
null == undefined 真
null === undefined 假
3.表达式的使用
if(a>0)
{
b = true
}
else
{
b = false
}
应写为b = a > 0
复杂情况可以使用局部变量或三元表达式
4.闭包与引用传递
1.闭包里传的都是引用(简单类型也是引用!)
2.for()循环内var定义的变量相当于在外面定义了var i = 0
for()循环内应使用let i = 0 , 这样i只在for循环内部可见
3.由于这个闭包的关系,可以看到,是循环完毕之后才返回
var methods = [] for(var i = 0 ; i < 10 ; i++) { methods[i] = (function(){ console.log("i =" , i) return i }) } methods[0]() VM1405:5 i = 10 10 i = 100 100 methods[0]() VM1405:5 i = 100 100
以下代码暴露出for循环内错误使用闭包以及var声明迭代器的严重错误
var methods = [] for(var i = 0 ; i < 10 ; i++) { methods[i] = (function(){ console.log("i =" , i) return i }) } methods[0]() VM1196:5 i = 10 10 for(var i = 0 ; i < 10 ; i++)methods[i]() VM1196:5 i = 0 VM1196:5 i = 1 VM1196:5 i = 2 VM1196:5 i = 3 VM1196:5 i = 4 VM1196:5 i = 5 VM1196:5 i = 6 VM1196:5 i = 7 VM1196:5 i = 8 VM1196:5 i = 9 9 methods[0]() VM1196:5 i = 10 10 for(var j = 0 ; j < 10 ; j++)methods[j]() 10VM1196:5 i = 10
4.对象深拷贝小技巧
var obj2 = JSON.parse(JSON.stringify(obj1))
5.关联数组长度
var size = Object.keys({a:1}).length //size = 1
6.JavaScript内存管理问题
什么样的数组需要手动回收?(全局引用)
7.bind/call/apply的使用
prototype与__proto__的联系
instanceof与constructor
8.如何判断一个对象的值是否是数字
100 , '100' , 'abc' , null
最佳答案:isNaN()
//注意 NaN == NaN 结果是false
9.JS中的分号问题
console.log('111') //没有加分号
(true && console.log('222')) //且用括号包着导致问题 报错第三句不能执行
console.log('333')
VM73:1 111
VM73:2 222
VM73:2 Uncaught TypeError: console.log(...) is not a function
at <anonymous>:2:1
console.log('111'); //加了分号之后 解决问题
(true && console.log('222'))
console.log('333')
VM74:1 111
VM74:2 222
VM74:3 333