js细枝末节(1)

(2)onmouseenter与onmouseover的区别

onmouseover与onmouseenter 事件在鼠标指针进入 div 元素时都会触发,唯一的区别是 onmouseenter 事件不支持冒泡 ,作用在子元素上时不会触发

  • onmouseover对应onmouseout
  • onmouseenter对应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)原始值:布尔,数字,字符串,null,undefined

原始值与复杂值(对象)的区别是每个对象有唯一的标识

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转换为数组

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接收两个参数,第一个是需要转换的值,第二个是参数参考的进制

任何数的零进制表示这个数本身,高于进制位所能表示的最大值数返回NaN(not a number),例如2的一进制返回NaN,因为一进制只能表示0和1

map方法里面接收一个函数,函数可以有三个参数,第一个参数是需要遍历的值,第二个参数是索引,第三个数组本身,

因此可以理解为

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)对象方法中的函数,导致的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

嵌套函数内部不能去访问方法中的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)有权访问另一个函数作用域内变量的函数都是闭包

定义在一个函数内部的函数
闭包最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中

(17)闭包一个


还没搞懂为什么用let和bind()

(19)Array.isArray([])

鲜为人知的事实:其实 Array.prototype 也是一个数组。
Array.isArray(Array.prototype) // true

(20)严格模式
js细枝末节(1)_第1张图片
struct.PNG
(21)getBoundingClientRect
js细枝末节(1)_第2张图片
image.png
(22)load与domcontentloaded
image.png

你可能感兴趣的:(js细枝末节(1))