1.写出下面程序的运行结果:
if([] instanceof Object){
console.log("hello");
}else{
console.log("world");
}
复制代码
答案是:hello
2.写出下面程序的运行结果:
var x = 1;
function ScopeTest(){
alert(x);
var x = "hello world";
alert(x);
}
ScopeTest();
复制代码
答案是:undefined
Hello world
3.写出下面程序的运行结果:
var t = true;
window.setTimeout(function(){
t = false;
},1000);
while(t){
}
alert("end");
复制代码
答案是:浏览器卡死,因为浏览器执行到setTimeout()定时器时,先不执行,先把它放到异步队列中,接着执行while循环同步任务,这时是一个死循环,所以,浏览器卡死。
4.写出下面程序的运行结果:
for(var i = 0; i < 5; i++){
setTimeout(function(){
console.log(i);
},1000);
}
复制代码
答案是:
5
5
5
5
5.写出下面程序的运行结果:
(1) console.log(isNaN(NaN));
(2) console.log(isNaN(23));
(3) console.log(isNaN('ds'));
(4) console.log(isNaN('32131dsafdas'));
(5) console.log(NaN === NaN);
(6) console.log(NaN === undefined);
(7) console.log(undefined === undefined);
(8) console.log(typeof NaN);
复制代码
答案是:
(1) true (2) false (3) true (4) true (5) false (6) false (7) true (8) number
6.写出下面程序的运行结果:
console.log( ‘hello’ + (1<2) ? 'world' : 'me');
复制代码
答案是:world
7.写出下面程序的运行结果:
if(10 > 9 > 8 == true){
console.log("html5");
}else{
console.log("css3");
}
复制代码
答案是:css3
8.写出下面程序的运行结果:
var obj = {};
obj.name = "first";
var peo = obj;
peo.name = "second";
console.log(obj.name);
复制代码
答案是:second
9.写出下面程序的运行结果:
var length = 10;
function fn(){
console.log(this.length);
}
var obj = {
length : 5,
method : function(fn){
fn();
arguments[0]();
}
};
obj.method(fn , 1);
复制代码
答案是:
10
2
10.写出下面程序的运行结果:
var output = (function(x){
delete x;
return x;
})(0);
console.log(output);
复制代码
答案是:0
11.平常在项目中,用到过css3的哪些新特性?
答案是:圆角,阴影,弹性盒子,transition,animation等。
12.列举3种强制类型转换和2种隐式类型转换?
答案是:强制类型转换:Number() , String() , Boolean(); 隐式类型转换:布尔值参与的+运算,会先将布尔值转成对应的数字,然后再进行+运算;数字和字符串使用+运算,会将数字转成字符串,然后再进行字符串的连接。
13.call和apply的区别?
答案是:call(新this对象,参数数组); apply(新this对象,参数列表);
14.什么是javascript的同源策略?
答案是:同源策略,限制一个源加载的文档或脚本如何与来自另一个源的资源进行交互。
15.你采取过哪些网站性能优化方法?
答案是:(1) 资源压缩合并,减少http请求; (2)非核心代码异步加载; (3)利用浏览器缓存; (4)使用CDN; (5)预解析DNS
16.列出几种js继承的实现方式?
答案是:
(1) 借助构造函数实现继承
function Parent(){
this.name = ‘lxf’;
}
function Child(){
Parent.call(this);
this.age = 18;
}
这种方式只能实现部分继承,即父类的构造方法中的属性,子类可以继承,其缺点是,父类原型上的属性或方法,子类无法继承。
(2)借助原型链实现继承
function Parent(){
this.name = ‘lxf’;
this.play = [1,2,3];
}
function Child(){
this.age = 18;
}
Child.prototype = new Parent();
这种继承方式的缺点是用子类Child实例化两个对象后,var s1 = new Child(); var s2 = new Child(); s1.play.push(4); console.log(s2.play); 也会打印出[1,2,3,4],其原因是两个对象的__proto__指向了同一个原型对象。
(3)组合方式
function Parent(){
this.name = ‘lxf’;
}
function Child(){
Parent.call(this);
this.age = 18;
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
此种方式是最完美的方式。
复制代码
17.rem实现自适应布局的原理是什么?
答案是:rem是根据html的font-size大小来变化,正是基于这个出发,我们可以在每一个设备下根据设备的宽度设置对应的html字号,从而实现自适应布局。