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

浙公网安备 33010602011771号