js回顾

一、this的4种绑定方式

 

1、  new绑定(构造器调用)

      function Person(name) {

      this.name = name;

    }

    var c = new Person("zdx");

    c.name;

2、  显示绑定(间接调用)

通过call()、apply()、bind()方法把 this 绑定到对象上,javascript内置的一些函数,具有显式绑定的功能,如数组的5个迭代方法:map()、forEach()、filter()、some()、every(),以及创建对象的 Object.create() 函数、原型链都可以手动绑定this。

    var obj = {

      a: "obj"

    };

    function fun() {

      console.log(this.a);

    }

    fun.call(obj);

    //"obj";

 

3、  隐式绑定(方法调用)

3.1方法调用时,this隐式绑定绑定所属的对象上

    var obj = {

      a: "obj",

      fun: function() {

        console.log(this.a);

        // obj

      }

    };

3.2隐式绑定丢失

当函数独立调用(执行)时,this 就会隐式绑定丢失,而绑定到 window 对象上。(非严格模式下),而严格模式下指向undefined

     function fun() {

      console.log(this === window);

    }

    fun();

    //true

4、  默认绑定

全局环境中this默认绑定到window

         console.log(this === window); //true

 

5、  优先级

new 绑定 > 显示绑定 > 隐式绑定 > 默认绑定 

 

二、js数据结构

1、  堆

特征:动态分配的内存,大小不定也不会自动释放。js的垃圾回收器,进行回收

存放内容:对象,数组

2、

特征:先进后出,自动分配内存,占据固定大小的空间,会自动释放

存放内容:Undefined、Null、Boolean、Number 和 String

 

     注意:初始化一样的对象,数据对应的地址不同。

    var obj1 = { a: 666 };

    var obj2 = { a: 666 };

    obj1 === obj2; //false

 

 

3、 队列

特征:先进先出

 

 

 

 

 

 

 

 

 

 

 

三、数据类型

1、  基本类型

分类:undefined,boolean,number,string,null;

特征:1、基本类型的值是不可变得,不能给基本类型添加属性和方法。

var person = 'jozo';

person.age = 22;

person.method = function(){//...};

console.log(person.age); // undefined

console.log(person.method); // undefined

2、  基本类型的比较是值的比较,只有在它们的值相等的时候它们才相等。 

 var a = 'jozo';

var b = 'jozo';

console.log(a === b);//true

3、 引用类型

分类:除了基本类型之外的

特征:1、引用类型的值是可变的

      2、引用类型的比较是引用的比较(即比较两个对象的堆内存中的地址是否相同)

      3、引用类型的值是同时保存在栈内存和堆内存中的对象

 

 

var person1 = {name:'jozo'};

var person2 = {name:'xiaom'};

var person3 = {name:'xiaoq'};

注:对象引用

var a = {}; // a保存了一个空对象的实例

var b = a;  // a和b都指向了这个空对象

a.name = 'jozo';

console.log(a.name); // 'jozo'

console.log(b.name); // 'jozo'

b.age = 22;

console.log(b.age);// 22

console.log(a.age);// 22

console.log(a == b);// true

 

四、立即执行函数(IIFE)

立即执行函数就是   1、声明一个匿名函数

2、马上调用这个匿名函数

 

作用:创建一个独立的作用域(隔离作用域,防止污染全局命名空间)。

      ES6之前 :JS只有全局作用域(global scope)、函数作用域(function scope)

 

ES6开始 :块级作用域(block scope)

 

 

五、对象

1、  对象方法:

Object.values()返回一个数组,其元素是在对象上找到的可枚举属性值

var obj = { foo: 'bar', baz: 42 };

console.log(Object.values(obj)); // ['bar', 42]

 

var an_obj = { 100: 'a', 2: 'b', 7: 'c' };

console.log(Object.values(an_obj)); // ['b', 'c', 'a']

 

console.log(Object.values('foo')); // ['f', 'o', 'o']

 

 

 

六、 

单个字符转数字: 
'a'.charCodeAt(0) 
结果: 97 
数字转字母: 
String.fromCharCode(97) 
结果:a

 

 

 

posted @ 2018-08-11 16:57  影之殇  阅读(137)  评论(0)    收藏  举报