004-dom练习题

第一题:

9,下列输出结果是true的是()
A,console.log(isNaN(123)); //isNaN()是一个函数
B, console.log(null==undefined); //true
C, console.log(null===undefined); //false
D, console.log(NaN==NaN); //false

解析:D,是地址值的比较。

扩展:

空对象:

{}=={}, //false。
{}==!{}; // false。
空对象是true,非空对象是false,相当于true==false相比较,结果打印false。
如果对象做比较,会调用两个方法toString() valueOf()
先调用 valueOf(),如果返回的原始值不是一个字符串,会再调用toString() ,会再通过Boolean去转换一下。

[]==[]; //fasle,地址值的比较
[]==![];//true, 因为空数组是true,非空数组就是false。

相当于:
[]==0 //true
0==false //true
[]==false //true

第二:
console.log(({}+{}).length); 打印结果是30,一个空对象的length是15,两个是30。
{}对象, 在高程数规定了 先调用valueOf()
如果返回的不是一个简单数据类型 再调用 toString()

console.log(({}.toString()).length); 打印结果是15.

console.log({}.toString());
控制台打印输出: [object Object] 数一下加上空格

第三题:
10,console.log(true&&”abc”);
&&右边是abc字符串,左边是true布尔类型,结果打印abc。两者都为真时,结果返回&&后边的。

3&&4 //4 左边为真,返回最右。左边为假返回左边的假
0&&4 //0

第四题:
1,JavaScript事件的三个阶段都有什么?如何阻止事件冒泡?

事件捕获阶段
事件目标阶段
事件冒泡阶段

三个方法阻止事件冒泡:

event.stopPropgation();
兼容ie的:event.cancelBubble=true;
return false;

2,foo = foo || bar,这个代码是什么意思?为什么要这样写?

短路代码! 代码更加的简洁

3,请写出动态创建元素的方法(最少写出4种方法)
1)innerHTML
2)appendchild
3)createElement
4) document.write


4, for(var i=1;i<=3;i++){
setTimeout(function(){
console.log(i);
},0);
};
执行结果是:4 4 4
for循环执行了3次,

原因:js是单线程的 for循环和setTimeout定时器 都是window的顶级对象
for循环执行完后 再执行定时器
nodejs也是单线程的。

如果需要在setTimeout中打印1 2 3 ?
解决:用自执行函数,并且在setTimeout中传入参数
变形:

 for(var i=1;i<=3;i++){
 //这里写一个自执行函数
    setTimeout(  (function(b){

        console.log(b);

        })(i), 0);
    };

for循环执行一次,自执行函数也执行一次。

5,var foo=1
function fn() {
foo=10;
return;
function foo(){
}
}
fn();
console.log(foo);
返回:1
讲解:提升
var foo;
function fn(){
function foo(){
}
foo=10;
return
}
foo=1;
fn()
console.log(foo)

解析:
var foo;
//全局
function fn(){
//相当于:var foo=function(){}
//局部的:function foo(){}

foo=10;
return

}
foo=1;
fn()
console.log(foo)

004-dom练习题_第1张图片

var foo=1
function fn() {
foo=10;
}
fn();
console.log(foo);

6,
function aa(){
return function(){
var aa=10;
var bb=20;
};
}
console.log(aa);
//输出function整个函数
function aa(){
return function(){
var aa=10;
var bb=20;
};
}
console.log(bb);
//报错,全局找不到。

7,分析下面的js代码段,输出结果是什么?并解释原因?

function Fn(){
return Fn
};
fn=new Fn()
console.log(fn instanceof Fn);

//打印结果是false。
//构造函数:考点:是看是不是实例! instanceof
解析:
fn=new Fn() new会在fn函数中创建一个this对象,
并返回this(相当于 return this)。

function Fn(){
var this={};
return Fn
return this
};
fn=new Fn()
console.log(fn instanceof Fn);

return Fn 了 return this 就不执行了。
Fn函数返回了整个函数体,
从而fn就是函数
而不是this指向的fn对象实例
那么fn和Fn是相同的函数
又因为函数不能是函数的实例。
所以返回false

补充:
var b=10;
setTimeout(function(){
alert(b);
var b=66;
},1000)
b=666;
alert(b);

结果: 666 undefined

var b
alert(b);
b=66;

你可能感兴趣的:(笔记部分)