您的位置:首页 > 职场人生

前端面试 JS 篇

2017-05-11 13:29 141 查看

js 中的事件委托或是事件代理详解

异步流程控制方法

谈谈两种设计模式

1:工厂模式

主要好处就是可以消除对象间的耦合,通过使用工程方法而不是 new 关键字。将所有实例化的代码集中在一个位置防止代码重复。

工厂模式解决了重复实例化的问题 ,但还有一个问题,那就是识别问题,因为根本无法搞清楚他们到底是哪个对象的实例。

function createObject(name,age,profession){
//集中实例化的函数
var obj = new Object();
obj.name = name;
obj.age = age;
obj.profession = profession;
obj.move = function () {
return this.name + ' at ' + this.age + ' engaged in ' + this.profession;
};
return obj;
}

var test1 = createObject('trigkit4',22,'programmer');//第一个实例var test2 = createObject('mike',25,'engineer');//第二个实例


2:构造函数模式

使用构造函数的方法 ,即解决了重复实例化的问题 ,又解决了对象识别的问题,该模式与工厂模式的不同之处在于:

1.构造函数方法没有显示的创建对象 (new Object());
2.直接将属性和方法赋值给 this 对象;
3.没有 renturn 语句。


null 和 undefined 的区别?

对未初始化的变量执行
typeof
操作符会返回
undefined
值,对未声明的变量执行
typeof
操作符同样也会返回
undefined
值,所以我们在编写代码的过程中应该显示的初始化变量,那么当
typeof
返回
undefined
的时候,我们就知道被检测的变量还没有被声明而不是还没有初始化。、

undefined
值是派生自
null
值的,他们的相等性测试要返回
true


alert(null == undefined);//true
alert(null === undefined);//false


null
值表示一个空对象指针,而这也正是使用
typeof
操作符检测
null
值会返回
“object”
的原因。

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为
null
,而不是其他值,这样一来,只要直接检查 `null“ 值就可以知道相应的变量是否已经保存了一个对象的引用。

if (car != null){
//对 car 对象执行某些操作
}


无论在什么情况下都没有必要把一个变量的值显示的设置为
undefined
,可以同样的规则对
null
却不适用。换句话说,只要意在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存
null
值。这样做不仅可以体现
null
作为空对象指针的惯例,而且也有助于进一步区分
null
undefined


谈谈 JS 严格模式

编写一个函数实现对 Object,Array,Boolean,Number,String 这五种主要数据类型进行值复制

function clone(obj) {
var o;
switch (typeof obj) {
case "undefined":
break;
case "string":
o = obj + "";
break;
case "number":
o = obj - 0;
break;
case "boolean":
o = obj;
break;
case "object": // object 分为两种情况 对象(Object)或数组(Array)
if (obj === null) {
o = null;
} else {
if (Array.isArray(obj)) {
o = [];
for (var i = 0; i < obj.length; i++) {
o.push(clone(obj[i]));
}
} else {
o = {};
for (var k in obj) {
o[k] = clone(obj[k]);
}

a90c
}
}
break;
default:
o = obj;
break;
}
return o;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: