-
position的默认值是什么?relative和absolute有什么区别?
- position的默认值是static。
- relative相对定位,相对于标准文档流位置进行定位;
- absolute绝对定位,脱离标准文档流,相对于static定位以外的第一个父元素进行定位;
- fixed固定定位,相对于浏览器窗口进行定位;
-
JS判断变量为数组你能写出哪些方法?JS有哪些创建对象的方式?
-
- typeof检测(这个办法并不能实时的检测出是否是数组,只能判断其类型,所以说typeof判断基本类型数据还是挺好的,但是不能准确测试出是否是数组)
- typeof 一般被用于判断一个变量的类型,我们可以利用 typeof 来判断number, string, object, boolean, function, undefined, symbol 这七种类型
let ary = [12,25,24]; console.log(typeof(ary)); // 输出"object"-
- instanceof 判断(从输出的效果来看,还是挺令人满意的,能准确的检测出数据类型是否是数组,但是有缺点,比如判断一个数组,他可以被 instanceof 判断为 Object。)
- instanceof 主要的实现原理就是只要右边变量的 prototype 在左边变量的原型链上即可。
let arr = [12,23,14,24]; console.log(arr instanceof Array); // 输出true console.log(arr instanceof Object); // 输出true-
- 原型链方法
- 这个是有兼容的哦,在IE早期版本里面__proto__是没有定义的哦~而且,这个仍然有局限性
let ary = [1,23,4]; console.log(ary.__proto__.constructor==Array);//true console.log(ary.constructor==Array)//true 这两段代码是一样的- 总结一下第2种方法和第3种方法局限性
instanceof 和constructor判断的变量,必须在当前页面声明的,比如,,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个ary,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor;会返回false;
- 原因
- Array属于引用型数据,在传递过程中,仅仅是引用地址的传递。
- 每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array;切记,不然很难跟踪问题!
作用域面试题
// 第一题 var number = 50; var obj = { number: 60, getNum: function () { var number = 70; return this.number; } } console.log(obj.getNum()); // 输出60 console.log(obj.getNum.call()); // 输出50 console.log(obj.getNum.call({ number: 20 })); // 输出20 // 第二题 for (var i = 0; i < 5; i++) { (function() { setTimeout(function() { console.log(i); // 输出 5个5 }, i * 1000); })(i); } // 第三题 var y = 10; if(!(x in window)) { var x = 10; } else { ++ y; } console.log(x); // undefined console.log(y); // 11 -