在javascript中,break与continue有着显著的差别。
如果遇到break语句,会终止最内层循环,无论后面还有多少计算。
如果遇到continue,只会终止此次循环,后面的自循环依然执行。
var num = ;
for (var k = ; k < ; k++) {
for (var i = ; i < ; i++) {
for (var j = ; j < ; j++) {
if (i === && j === ) {
break;
}
num++;
}
}
}
console.log(num);
此时 num=3*3-3*2=21
如果换成continue,则 num=3*3-3*1=24;
看看换成标签会出现什么情况呢,情况代码:
var num = ;
comeouter:
for (var k = ; k < ; k++) {
for (var i = ; i < ; i++) {
for (var j = ; j < ; j++) {
if (i === && j === ) {
break comeouter;
}
num++;
}
}
}
console.log(num);
由于是break,因此,一旦i===1&j===1,则立刻退出全部循环,因此 num=4;
如果是continue,则只保留最外层的循环,里层循环不在执行,因此 num=3*4=12;
(二)
在面向对象的语言中, 根据函数的参数类型与参数的个数不同,我们可以对函数进行重载; 但是Javascript中没有函数重载的说法。
如果定义两个javascript函数,解析器只会解析写在最底端的那个函数。
function testA(num1, num2) {
console.log(num1+'-'+num2);
}; function testA(num1) {
console.log(num1);
}; testA(, );
运行的结果是 15。
也许会觉的奇怪,我传入了两个参数,调用的是只有一个参数的函数,为什么不报错呢?
这是因为在Javascript中,解析器不管传过来的参数的个数以及类型的,有多少调多少。
所有的参数其实都是放在一个叫做 arguments 里的,这类似于一个数组,可以存储不同类型的数据,看下面的代码。
function testA() {
console.log(arguments[]+'--'+arguments[]);
}; testA(, );
输出结果是15--18。
(三)
关于’==‘与’====‘的区别
请看下面
console.log(true==1) 输出true
console.log(true===1) 输出false
(四)
任何与NaN 进行操作,输出的结果都是Nan,比如NaN + 1。
这里比较好玩的是NaN==NaN 输出 false,
但null==null true 。
null ==undefined ture,实质上undefined是null的子类.
null 值其实一个空对象指针,因此 typeof null 返回的是一个object。