1.$(document).ready和window.onload区别
$(document).ready和window.onload都是在都是在页面加载完执行的函数,大多数情况下差别不大,但也是有区别的。
$(document).ready:是DOM结构绘制完毕后就执行,不必等到加载完毕。 意思就是DOM树加载完毕,就执行,不必等到页面中图片或其他外部文件都加载完毕。并且可以写多个.ready。
window.onload:是页面所有元素都加载完毕,包括图片等所有元素。只能执行一次。
所以,$(document).ready的执行时间要早于window.onload。并且可以写多个,
2.箭头函数与普通函数的区别
普通函数中的this指向函数被调用的对象,谁调用就是谁
所以箭头函数中的this是固定的,它指向定义该函数时所在的对象。
a.普通函数的this总是指向它的直接调用者。
b.在严格模式下,没找到直接调用者,则函数中的this是undefined。
c.在默认模式下(非严格模式),没找到直接调用者,则函数中的this指向window。
对于方法(即通过对象调用了该函数),普通函数中的this总是指向它的调用者。
对于一般函数,this指向全局变量(非严格模式下)或者undefined(严格模式下)。
new时才给this赋值
通过将this值赋给一个临时变量来实现。var that=this
通过bind()来绑定this。 function(){console.log(this.a),3000}.bind(this)
箭头函数中没有自己的this,arguments,new target(ES6)和 super(ES6)。
箭头函数中的this始终指向其父级作用域中的this。换句话说,箭头函数会捕获其所在的上下文的this值,作为自己的this值。任何方法都改变不了其指向,如call(), bind(),
apply()。在箭头函数中调用 this 时,仅仅是简单的沿着作用域链向上寻找,找到最近的一个 this 拿来使用,它与调用时的上下文无关。
1、箭头函数作为匿名函数,是不能作为构造函数的,不能使用new
// /2、箭头函数不绑定arguments,取而代之用rest参数…解决
// /3、箭头函数会捕获其所在上下文的 this 值,作为自己的 this 值
// /4、箭头函数当方法使用的时候没有定义this绑定
// /5、箭头函数没有原型属性
// //箭头函数的this永远指向其上下文的 this,任何方法都改变不了其指向,如call(), bind(), apply()
// //普通函数的this指向调用它的那个对象
3. “==” 和 “===”区别
* ==:隐式类型转换,数据类型不相同也会返回ture
* ===:数据类型不同,返回false
* 引用数据类型,
* ==,比较内存地址
4.正负小数,小数位数不限
var reg=/^(-)?\d+(\.\d+)?$/g;
5.call()和apply()共同的作用--->改变this的指向
区别:传参列表不同
call():需要将实参按照形参的样式(个数)传进去
apply():必须传的是arguments(参数数组)
apply和call区别,
call(), 需要把实参按照形参的样式(个数)传进去;
apply():必须传的是arguments(参数数组)
6.闭包
* 当内部函数被保存到外部时,形成闭包。
* return b;b函数被保存到外部,
* 闭包会导致原有作用域链不释放,造成内存泄漏。
* 本来a()执行完,aAO{}销毁,function b(){}跟着被销毁,
* 由于return b;b函数被保存到外部,aAO{}没有被销毁(不释放),
7.匹配子窜
块级元素?
总是在新行上开始;
高度,行高以及外边距和内边距都可控制;
宽度缺省是它的容器的100%,除非设定一个宽度。
它可以容纳内联元素和其他块元素
行内元素?
和其他元素都在一行上;
高,行高及外边距和内边距不可改变;
宽度就是它的文字或图片的宽度,不可改变
内联元素只能容纳文本或者其他内联元素
对行内元素,需要注意如下:
设置宽度width 无效。
设置高度height 无效,可以通过line-height来设置。
设置margin 只有左右margin有效,上下无效。
设置padding 只有左右padding有效,上下则无效。注意元素范围是增大了,但是对元素周围的内容是没影响的
es5继承
es6继承
深度拷贝
数组去重
// //map方法 不能中断遍历
var t=[1,3,9,10,20];
// for(var i in t){
//// document.write(i+"<br>");
//// document.write(t+"<br>");
// document.write(t[i]+"<br>");
// }
//
// //对数组中的每個元素都進行*2,打印結果數組为一個新數組。
// //返回一個新数组每个项,处理完后的结果组成的新数组,原数组不被影响
//不能中断遍历
//item:当前的选项
//index:索引
//array:当前数组
//return:返回每個项处理的結果
// var m= t.map(function(item,index,array){
// if (index === 3) {
//// item="56";//此处赋值之后还会被return改变
// return "56";//return返回的是每项的值,不是整个函数或数组,且此处赋值之后不会被后面的return改变,
// }
// return item*2
// });
// console.log(t);
// console.log(m);
////
//
/*
* forEach
* 返回underfined 不能中断遍历
* 按升序为数组中含有效值的每一项执行一次callback函数,
* 那些已删除(使用delete方法等情况)或者未初始化的跳过项被(但不包括那些只为underfined的项)
* 回调函数的参数:
* item:项的值
* index:索引
* array:数组对象本身
* */
// var arr=["54",true,456,NaN,{name:"张三"},null,["a","b","c"],undefined];
// arr.forEach(function(item,index,array){
// //item:是遍历的每个项
//// console.log(item); NaN, null, undefined,
//// console.log(typeof item);//"number", "Object", "undefined"
//// console.log(typeof(typeof item));//"string","string", "string"
// //NaN属于number类型
//// console.log(item==NaN);
//// console.log(item===NaN);//false
//// console.log(item===NaN);
//// console.log(item==="NaN");//false
//// console.log(item===null);//ture
//// console.log(item==="null");
//// console.log(item===undefined);//ture
//// console.log(item==="undefined");
// //index:项对应的索引
//// console.log(index);
// //array:数组对象本身
//// console.log(array);
// if(index===2){
// return;//跳过本次循环,进入下一层循环
// }
//// console.log(item);
//// console.log(array);
// });
// console.log(arr);
// for of循环, es6 遍历神器
/*
*for of 可以跳出循环了, 而且语法相对原始的for循环来说简洁一些,
* 支持return(函数里用), break, continue;
* */
// var arr = [1, 2, 3];
// for (let i of arr) {
// console.log(i);
// if (i === 2) break;
// }
// for in 可以跳出循环
/*
*for … in 会遍历对象原型链上的属性,有时候是意想不到的错误。
* 解决方法: 判断是否自身属性即可, obj.hasOwnProperty()。
* */
var obj = {name: 'bob', age: 25, gender: 'male'};
obj.__proto__.test = 'test prototype';
for (let key in obj) {
// console.log(key);
if (obj.hasOwnProperty(key))//判断是否是自己的
console.log(obj[key]);
}









网友评论