易错函数拼写
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引擎的单线程处理方式有关,每个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');