js笔记——记录在js中踩过的坑

4 篇文章 0 订阅

易错函数拼写

forEach 而不是 foreach
split 而不是splite

字符串操作

str = str.split 而不是 str.split

public String substring(int beginIndex, int endIndex)函数,从beginIndex开始取,到endIndex结束,从0开始数,其中不包括endIndex位置的字符

“smiles”.substring(1, 5) returns “mile” 而不是"miles"。

字符串不能被部分修改,应该是word.replace(……) 而不是 word[0] = ‘i’。

js forEach 不能用 break!!!return也不能正常返回!!!

forEach()无法在所有元素都传递给调用的函数之前终止遍历。也就是说,没有像for循环中使用的相应的break语句。如果要提前终止,必须把forEach()方法放在一个try块中,并能抛出一个异常。如果forEach()调用的函数抛出foreach.break异常,循环会提前终止:

可换成some或every,参考:Javascript Array forEach()中无法return和break,代替方法some()与every()

也可换成for + break

慎用函数默认实例arguments

例题:FCC: Seek and Destroy

function destroyer() {
  // 请把你的代码写在这里
  var array = arguments[0];
  
  return array.filter(function(data){
    var contain = true;  
    //错误,这里的arguments已经变成了filter回调函数的arguments。
    for (var i=1; i<arguments.length; i++){
         if (data === arguments[i]){
           return false;
         }
    }
    return true;
  });
}

位置放在body末尾

js推荐放到body结束标签的末尾:参考https://blog.csdn.net/u012211821/article/details/78919695

js中的空 null “”

空字符串是否为非数字?结果为false,不是非数字,也就是,它是数字。
alert(isNaN(""));

*1将其转化为数字,看来,空字符串=0
alert(("")*1);

js运算符:http://javascript.ruanyifeng.com/grammar/operator.html#toc6

js判读是否为null:JS判断null的方法分析_javascript技巧_脚本之家

js异步编程

js可能不按顺序执行!如果遇到非阻塞事件,则会先跳过去,顺序执行剩余代码。

参考:js执行顺序js异步 - CSDN博客

Js阻塞机制,跟Js引擎的单线程处理方式有关,每个window一个JS线程。所谓单线程,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。

由于浏览器是事件驱动的(Event driven),因此浏览器中很多行为是异步(Asynchronized)的,很容易有事件被同时或者连续触发。当异步事件发生时,会创建事件并放入执 行队列中,等待当前代码执行完成之后再执行这些代码,如鼠标点击事件发生、定时器触发事件发生、XMLHttpRequest完成回调这些事件,都会被放 入执行队列中等待。

关于Js的阻塞机制,可以看下面一段代码,一般,我们会认为,这段代码会log出来0,1,2

for(var i=0;i<3;i++){
setTimeout(function(){
console.log(i);
}, (i+1)*1000);
}
而实际上,这段代码log出来的结果是 3,3,3。这是js新手很容易遇到的问题,具体原因就是因为for循环的阻塞机制。在上面的代码中,setTimeout这个定时器需要等待for循环 执行完成,而for循环执行完成了之后,i已经为3了,此时才开始执行setTimeout,因此console.log(i)会是3。

比如遇到$http请求事件时,如何保证按顺序执行?

参考:angualrjs,$http异步操作执行完再执行下一步该怎么写

解决方法一:嵌套
步骤1.success{
   步骤2.success{
      步骤3}} 这样的写法    
解决方法二:使用事件
$scope.$on('step1success',function(){
    //步骤二代码
//执行完成后在回调函数中触发
    $scope.$emit('step2success');
});
$scope.$on('step2success',function(){
    //步骤3代码
//执行完成后在回调函数中触发
    $scope.$emit('step3success');
});
$scope.$on('step3success',function(){
    //全部执行完成
});

//步骤一代码
//执行完成后在回调函数中触发
$scope.$emit('step1success');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值