一.JQuery 中 $.fn.extend 函数的实现(实现核心代码即可)
//关键:修正参数deep、target、源对象的起始下标 => 逐个遍历源对象
jQuery.extend = jQuery.fn.extend = function() {
/**
* options: 指向某一个源对象
* name: 代表某个源对象里的某个属性名
* src: 代表某个源对象里的某个属性的原始的值
* copy: 表示某个源对象里的某个属性的值
* copyIsArray: 表示变量copy是否为数组
* clone: 表示进行深度复制时原始值的修正值
* target: 指向目标对象
* deep: 表示是否执行深度复制,默认为false不进行
*/
var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
//如果第一个参数时布尔值,就把第二个参数当做是目标对象
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[ i ] || {};
i++;
}
//如果目标对象不是对象或者一个函数,那就当作 空对象 处理
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
//没有传入源对象的情况(1,只有一个参数 2,第一个参数时deep值,第二个参数是参数)
if ( i === length ) {
target = this;
i--;
}
for ( ; i < length; i++ ) {
if ( (options = arguments[ i ]) != null ) {
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
if ( target === copy ) {
continue;
}
//覆盖掉同名属性
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && jQuery.isArray(src) ? src : [];
} else {
clone = src && jQuery.isPlainObject(src) ? src : {};
}
target[ name ] = jQuery.extend( deep, clone, copy );
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
return target;
};
二.隐藏元素的几种方法:
1.display:none
2.visibility:hidden
3.opacity:0
4.position:absolute;left:-10000px;
三.javascript有几种数据类型?
1.基本数据类型:String,Number,Boolean,Undefined,Null
2.复杂数据类型:Object
四.问下面依次输出什么?
var a = 10;
function test(){
var b = 2 * a;
var a = 20;
var c = a / 2;
console.log(b);
console.log(c);
}
test();
答案:NaN,10
五.问下面依次输出的是什么?
var name = "珠宝1";
function test2(){
alert(tt);
var tt = "珠宝2";
alert(tt);
}
test2();
答案:undefined,珠宝2
六.定义一个log方法,让它可以代理console.log的方法
var log = console.log.bind(console);
七.以下代码输出的是什么?
console.log(1);
setTimeout(function(){console.log(2)},1000);
setTimeout(function(){console.log(3)},0);
console.log(4);
答案:1,4,3,2
八.以下代码输出的是什么?
alert(0/0);//NaN
alert(1/0);//infinity(无穷大)
for(var i = 0,j = 0; i < 10, j < 6; i++, j++){
value = i + j;
}
alert(value);//10
var arr = [1,'abc',function(){alert(3333);}];
alert(arr[2]());
arr[2]();//3333,undefined,3333