(2)onmouseenter與onmouseover的區(qū)別
onmouseover與onmouseenter 事件在鼠標(biāo)指針進入 div 元素時都會觸發(fā),唯一的區(qū)別是 onmouseenter 事件不支持冒泡 ,作用在子元素上時不會觸發(fā)
- onmouseover對應(yīng)onmouseout
- onmouseenter對應(yīng)onmouseleave
(4)正則去字符串兩邊空格
function totrim(str){
return str.replace(/(^\s*)|(\s*$)/g,"");
}
String.prototype.trim = function(){
return this.replace(/(^\s*)|(\s*$)/g,"");
} //為字符串原型上添加trim方法去除兩端空格
var des = " cool ";
var end = "haha";
var start = "mynameis";
var connect = start + des + end;
console.log(connect); //mynameis cool haha
var connect1 = start + totrim(des) + end;
console.log(connect1); //mynameiscoolhaha
一定要加上g,不然只會去掉字符串前面的空格鹅龄,進行全局匹配
(7)原始值:布爾,數(shù)字涝婉,字符串,null,undefined
原始值與復(fù)雜值(對象)的區(qū)別是每個對象有唯一的標(biāo)識
var obj = {name:"weiwei"};
var obj2 = {name:"weiwei"};
console.log(obj === obj2); //false
原始值的屬性不能被改變蔗怠,添加移除
var str1 = "wei";
str1.length = 1;
console.log(str1.length); //3
(8)特殊的變量arguments
function params(){ return arguments};
var args = params('w','e','i');
args.length //3
args[2] //'i'
(9)將arguments轉(zhuǎn)換為數(shù)組
function get_args(){
return toArray(arguments);
}
function toArray(likeArray){
return Array.prototype.slice.call(likeArray); //slice?
}
console.log(get_args('wei','da','pao','haha'));
//Array [ "wei", "da", "pao", "haha" ]
(11)map和parseInt的坑
console.log([1,2,3].map(parseInt)) //Array [ 1, NaN, NaN ]
parseInt接收兩個參數(shù)瞒滴,第一個是需要轉(zhuǎn)換的值熏迹,第二個是參數(shù)參考的進制
任何數(shù)的零進制表示這個數(shù)本身,高于進制位所能表示的最大值數(shù)返回NaN(not a number),例如2的一進制返回NaN,因為一進制只能表示0和1
map方法里面接收一個函數(shù),函數(shù)可以有三個參數(shù)祖凫,第一個參數(shù)是需要遍歷的值摔癣,第二個參數(shù)是索引楞捂,第三個數(shù)組本身烧给,
因此可以理解為
parseInt('1',0); //1
parseInt('2',1); //NaN
parseInt('3',2); //NaN
但是有一些情況會非常難受
console.log(parseInt(10,9)); //9
console.log(parseInt(15,14)); //19
parseInt(15,14); 將15拆成1加5,1的十四進值是14侵浸,而5表示5旺韭,14+5=19
(14)對象方法中的函數(shù),導(dǎo)致的this丟失問題
var people = {
name:"bang",
classmates:['joe','john','flank'],
count:function(){
this.classmates.forEach(function(value){
console.log(this.name + " say hello to " + value);
},this)
}
}
people.count();
//bangsay hello to joe
//bangsay hello to john
//bangsay hello to flank
嵌套函數(shù)內(nèi)部不能去訪問方法中的this變量
var girl = {
face:"beauty",
assess:function(){
var that = this;
return function(){
console.log('girl is '+ that.face);
}
}
}
girl.assess()();
Array.prototype.forEach(callback(currentValue, index, array){
// do something
}[,thisArg]);
(16)有權(quán)訪問另一個函數(shù)作用域內(nèi)變量的函數(shù)都是閉包
定義在一個函數(shù)內(nèi)部的函數(shù)
閉包最大用處有兩個掏觉,一個是前面提到的可以讀取函數(shù)內(nèi)部的變量区端,另一個就是讓這些變量的值始終保持在內(nèi)存中
(17)閉包一個
<script>
var myarr = [];
for(var i = 0;i < 7;i++){
myarr.push(console.log.bind(null,i));
}
myarr[0](); //0
myarr[2](); //2
/*****************************/
var myarr1 = [];
for(let j = 0;j < 7;j++){
myarr1.push(function(){
console.log(j);
})
}
myarr1[2](); //2
myarr1[5](); //5
</script>
還沒搞懂為什么用let和bind()
(19)Array.isArray([])
鮮為人知的事實:其實 Array.prototype 也是一個數(shù)組。
Array.isArray(Array.prototype) // true
(20)嚴(yán)格模式
struct.PNG
(21)getBoundingClientRect
image.png
(22)load與domcontentloaded
image.png