清除浮动的方法
- 使用空标签清除浮动 ,在所有浮动元素的最后加入一个空标签定义 clear:both
- 使用overflow:auto/hidden;
- 使用after伪类
- 父元素设置高度
浏览器如何判断元素是否匹配某个css选择器?
从后往前判断。浏览器先产生一个元素几个,这个集合往往由最后一个部分的索引产生。然后线上匹配,如果不符合上一个部分,就把不符合的元素从集合中删除,知道整个选择器都匹配完
列出你所知道的display属性
- none
- block
- inline
- inline-block
- table
- table-row (表格行,tr)
- table-cell (单元格,th,td)
- inherit
事件代理
利用浏览器的冒泡机制,当需要对很多元素添加事件的时候,可以通过将事件添加到他们的父节点儿将事件委托给父节点来触发处理函数
解释一下js中this是如何工作的
this 永远指向函数运行是所在的对象,而不是函数被创建时所在的对象。匿名函数或不处于任何对象中的函数指向window
- 如果是call,apply,指定的this是谁,就是谁
- 普通的函数调用,函数被谁调用,this就是谁
js引擎如何查找属性
function getProperty(obj,prop){
if(obj.hasOwnProperty(prop)){
return obj[prop]
}else if(obj.__proto__!==null){
return getProperty(obj.__proto__,prop)
}else {
return undefinded
}
}
描述一下null和undefined的区别?
null是一个表示‘无’的对象,转为数值时为0,undefined的一个表示‘无’的原始值,转换为数值时为NaN
null用法
- 用来初始化一个变量,这个变量可能被赋值为一个对象
- 用来和一个已经初始化的变量做比较
- 当函数的参数期望是对象时,被作为返回值传入
- 当函数的返回值期望是对象时,被作为返回值传出
undefined用法
- 变量被生命了,但是没有赋值,就等于undefined
- 调用函数时,应该提供的参数没有提供,改参数等于undefined
- 对象没有赋值的属性,改属性的值为undefined
- 函数没有返回值时,默认返回undefined
call和apply的区别
call和apply的作用相同,都是改变函数内部的this指向,但传参方式不同
- call: 参数依次传入
- apply:原函数参数以数组的形式进行传值
在什么时候会使用document.write()?
大多数生成广告的代码依旧使用document.write()
解释变量声明提升
在js里声明的变量,存在于作用量里,而在函数执行时会把变量的声明进行提升,而其值的定义还在原来的位置
function test (){
console.log(name) // undefined
var name = 'yjy'
console.log(name) // yjy
}
// 等价于
function test (){
var name
console.log(name)
name = 'yjy'
console.log(name)
}
描述事件的冒泡机制
- 冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发
- 捕获型事件:相反
attribute 和 property的区别
attribute: 是HTML标签上的属性,如id,class,value,必须是字符串类型
property:是js获取的dom对象上的属性值,可以看作一个基本的js对象,value,className,onclick等。通过‘.’获取dom的property
document.onload 和 document.ready 的区别
onload:表示页面包含图片等文件在内的所有元素等加载完成
ready:表示文档结构已经加载完成(不包含图片等非文字媒体文件)
如何实现下列代码:[1,2,3,4,5].duplicator();//[1,2,3,4,5,1,2,3,4,5]
let arr1 = [1, 2, 3, 4, 5];
Array.prototype.duplicator = function() {
return this.concat(this);
};
let arr2 = arr1.duplicator();
console.log(arr2); // [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
console.log(arr1); // // [1, 2, 3, 4, 5]