JavaScript 所谓的坑

JS中的let和var的区别:https://www.cnblogs.com/fly_dragon/p/8669057.html

主要是:

1.在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。

2.let定义的更像一个正常的 变量,不存在变量提升、未定义前就能使用(变量提升)、不允许重复定义等现象!
 

1.刚刚接触javascript时的this,变来变去的,心里一万头草泥马呼啸而过

2.for循环里做异步操作,循环的索引用var声明而不是用let,导致异步操作里面的索引值全是一样的 

1、对象属性不要用箭头函数

cc.Class({
  a: ()=>{
    // 错误,访问不到
    this.b();
  }, 
  b: function(){}
});

2、对函数进行bind会返回新对象,事件监听无法取消

this.node.on('touchstart', this.onTouch.bind(this));
// 两次传递的this.onTouch.bind(this)是不同对象,内部判断===的时候是false,不能取消
this.node.off('touchstart', this.onTouch.bind(this));

3、实数不能直接比较,0.4*7!==2.8,通过Math.abs(0.4*7-2.8)<1e-6来比较相等
4、受JS单线程的影响,setInterval不精确,时间越长误差越大,要采用相对计时。
5、基本类型赋值是值拷贝,对象赋值是指针拷贝,对象传递得深的时候容易误改数据。

function modify(v) {
  v.a = "World";
}
var v = {a: "Hello"};
modify(v);
console.log(v); // {a: "World"}

6、变量提升

var flag = true;
function verify() {
  if (flag) {
    ......
    var flag = false;
  }
}
// 实际等价于:
var flag = true;
function verify() {
  var flag; // = undefined
  // 下面的if内容不会执行
  if (flag) {
    ......
    flag = false;
  }
}

7、闭包访问循环变量

for (var i = 0; i <= 10; i++) {
  this.nodes[i].on("touchstart", ()=>{
    // 总是输出node 11 touched. 循环变量var i改成let i才正确。
    console.log("node " + i + " touched.");
  }
}
  1. 可以的话,换TS
  2. 用let和const
  3. 用===而不是==
  4. 变量声明尽量赋值

一:声明变量时一不小心漏掉 var,变量会变成全局变量

解决方法:声明 "use strict";
(这个问题 Creator 在开发过程中遇到过几次,出现的几率很低,影响也很小)

二:return 语句后面不能直接换行,否则会返回 undefined

// 如果你有一天发现 return 语句超出了 80 个字符,想要让它另起一行,变成这样
                       
                       return 
                           obj && obj.abc;

// 那么你的返回值永远都会是 undefined,因为 return 语句在执行到回车时已经结束了。
// 后面的表达式根本就不会执行到。
// 这个错误很难暴露出来,因为可能本来就要返回 false/undefined。正确的写法:
                       
                       return obj && 
                           obj.abc;

(这个问题在 Fireball 开发过程中遇到过一次,查了我好久)

三:array.sort() 默认的比较器会把元素转换为字符串再进行比较,导致整型排序出错

// 下面的结果竟然是 [10, 8, 9]
[9, 10, 8].sort()
// 下面的结果才是 [8, 9, 10]
[9, 10, 8].sort(function (lhs, rhs) { return lhs - rhs; })

猜你喜欢

转载自blog.csdn.net/wangyihero8/article/details/86535124
今日推荐