js基础知识点收集
js基础知识点收集
js常用基本类型
function show(x) {
console.log(typeof(x)); // undefined
console.log(typeof(10)); // number
console.log(typeof('abc')); // string
console.log(typeof(true)); // boolean
console.log(typeof([])); // object
console.log(typeof(function () {
})); //function
console.log(typeof([1, 'a', true])); //object
console.log(typeof ({a: 10, b: 20})); //object
console.log(typeof (null)); //object
console.log(typeof (new Number(10))); //object
}
show();
值类型:undefined, number, string, boolean
引用类型:函数、数组、对象、null(一切引用类型都是对象,对象是属性的集合)
js原型及原型链
function Fn() { }
Fn.prototype.name = '王福朋';
Fn.prototype.getYear = function () {
return 1988;
};
var fn = new Fn();
console.log(fn.name);
console.log(fn.getYear());
fn是Fnnew出来的对象,fn.proto === Fn.prototype
js原型链
function Foo() {
}
var f1 = new Foo();
//f1.a = 10;
Foo.prototype.a = 100;
Foo.prototype.b = 200;
console.log(f1.a);//100
console.log(f1.b);//200
f1赋值的时候有
console.log(f1.a);//10
console.log(f1.b);//200
原型链:访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链
js原型链继承
A = {
a: function () {
console.log('a');
}
}
B= {
b: function () {
console.log('b');
}
}
A.a();//a
B.b();//b
Object.setPrototypeOf(A,B);//把B的原型给A
A.b();//b
js上下文
提到js的上下文先说下this关键字
在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了
情况1:构造函数
function A() {
this.a = 'a';
this.hello = function () {
console.log(this.a);//a
}
console.log(this);//{a: "a"}
}
var a = new A();
a.hello();
如果函数作为构造函数用,那么其中的this就代表它即将new出来的对象。
情况2:函数作为对象的一个属性
console.log(this.a);//a
情况3:函数用call或者apply调用
var B = {
b: 'b'
}
var A = function () {
console.log(this.b);
}
A.call(B);//b
当一个函数被call和apply调用时,this的值就取传入的对象的值。
情况4:函全局 & 调用普通函数
在全局环境下和普通函数调用的时候,都是window