1.this指向:
(1)new 调用时指的是被构造的对象;
(2)call,apply 调用,指向我们指定 的对象;
(3)对象调用时,this 指向那个对象;
(4)默认状况下,指向全局变量 window;
var add = function(){
console.log(this) //指向window
}
add()
function str(){
console.log(this) //指向window
}
str()
2.构造函数,原型:
function Add(){
this.a = function(){
return "hello"
}
}
Add.prototype.b = function(){
return "world"
}
var add = new Add();
console.log(add.a()); //输出"hello"
//或者这样写
var add1 = new Add().a();
console.log(add1) //输出"hello"
//调用原型
var add2 = new Add().b();
console.log(add2) //输出"world"
3.数据类型的转换和比较:
(1)数据类型可以分为两大类:不可改变的原始数据类型,和可以改变的引用数据类型;
(2)原始数据类型:number,string,undefined,boolean,null
引用数据类型:object,array,date,function。。。。
(3)检测数据类型(typeof):
typeof 可返回的值有七个:number,string,boolean,object,function,undefined,symbol(es6新增)
console.log(typeof {}) //object
console.log(typeof []) //object
console.log(typeof null) //object
console.log(typeof Array) //function
console.log(typeof Function) //function
console.log(typeof NaN) //number
当返回值相同时,如何区分它们:
var obj = {};
var arr = [];
console.log(typeof obj); //object
console.log(typeof arr); //object
//如何区分它们?
var a = Object.prototype.toString.call(obj);
console.log(a); //[Object Object]
var b = Object.prototype.toString.call(arr);
console.log(b); //[Object Array]
(4)数据类型的转换:
Boolean():将任何类型转换成 true 和 false;
Number():将任何类型转换成数值类型以及 NaN;
String():将任何类型转换成字符串;
console.log(Boolean([])) //true
//Boolean转换时,除以下几种为false,其余的都为true;
console.log(Boolean('')) //false
console.log(Boolean(undefined)) //false
console.log(Boolean(null)) //false
console.log(Boolean(0)) //false
console.log(Boolean(NaN)) //false
console.log(Number({})) //NaN
console.log(Number(undefined)) //NaN
console.log(Number(NaN)) //NaN
console.log(Number([])) //0
console.log(Number(false)) //0
console.log(Number(null)) //0
console.log(Number(true)) //1
console.log(Number(123)) //123
console.log(Number("123")) //123
(5)"==" 运算符:
本身就是两个 boolean 值进行比较,但是在比较前,会转换成 number ,再进行比较;
console.log(([])?true:false);
//等同于 console.log(true?true:false) 输出:true
console.log(([]==false?true:false));
//等同于 console.log(0 == 0?true:false) 输出:true
console.log(({}==false)?true:false)
//等同于 console.log(NaN == 0?true:false) 输出:false
//NaN 不等于任何值,包括它自己
注意:三目表达式本身就代表 if 判断语句;
NaN 不等于任何值,包括它自己;
(6)null 和 undefined 的区别:
null 本身是一个对象,但这个对象不存在;(不存在)
undefined 表示一个对象或者变量没有赋值;(存在,但是没有值)
undefined 和 null 与任何有意义的值比较返回的都是 false;但它们相互间比较返回true;
console.log(null == undefined) //输出 true
console.log(undefined == false) //输出 false
console.log(null == false) //输出 false
(7)toString() 方法:
当在 toString() 中传入的参数为一个整数时(不能为1),它表示的是转换成进制;
var a = 123;
console.log(a.toString(2)) // 二进制:1111011
console.log(a.toString(8)) // 八进制:173
console.log(a.toString(10)) // 十进制(本身):123
console.log(a.toString(16)) // 十六进制:7b