1、
var a=+'86'; console.log(a);//输出86,+会把字符串转化为数字或者NaN
var a=+'2R'; console.log(a); //如果引号内不全是数字就转化为NaN
2、运算符优先级
算术运算符最高
关系运算符次之
逻辑运算符次之
例如:9>3+4&&7
先算3+4 再判断9是不是大于7,再&&
3、短路逻辑
//短路逻辑 var a=42&&5142; a;//第一个条件不为0(满足),则输出第二个条件的值 var a=0&&5142; a;//第一个条件为0(不满足),则输出第一个条件的值,第二个条件不理会
4、声明时无定义则转为默认值写法
1 function Address(stress,xno){ //构造器函数首字母默认大写 2 this.stress=stress||"Huang Quan Road"; 3 this.xno=xno||135; 4 this.toString=function(){ 5 return "stress:"+this.street+",No:"+this.xno; 7 } 9 } 11 /* 12 如果传入参数并没有street和xno,则使用默认值Huang Quan Road和135 13 */
5、call()和apply()函数
call和apply通常用来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数,不同的是,apply的第二个参数为一个函数需要的参数
组成的一个数组,而call则需要跟若干个参数,参数之间以逗号","隔开。
6、new的本质:使用new操作符来作用于一个函数,实质上发生如下动作:首先,创建一个空对象,然后用apply方法,将这个空对象传入作为apply的第一个参数
以及上下文参数,这样函数内部的this将会被这个空的对象所替代。
1 var triangle=new Shape("striangle"); 2 3 // 调用构造器Shape(),实际上等价于如下 4 5 var triangle={}; 6 Shape.apply(striangle,["triangle"]); 7 8 //上行中第一个striangle,为空对象,第二个"striangle"为传入Shape的参数
7、JavaScript预包装的9个原生对象构造函数如下:Number(). String() Boolean() Object() Array() Function() Date() RegExp() Error()
以上九种原生构造函数返回值中,除了Function()和RexExp()的返回值类型为function外,其他都是object
8、实例化对象的__proto__属性不一定被所有浏览器兼容,如对某一个实例化对象var myJob=new object;
其原型myJob.__proto__===myJob.constructor.prototype(只能写成后者,前者可能不被识别)
9、将对象b的原型指向一个新的对象a(b继承之a,a是b的原型),可以采用如下写法:
1 b.prototype=new a("tom"); 2 // 假设对象a有一个参数 3 4 //也可以写成如下等式 5 var c=new a("tom"); 6 b.prototype=c;
10、JavaScript中比较两个数组相等
直接比较数组相等,实际上是比较数组的内存地址是否相等,所以,直接用==和===比较两个数字,最后都会返回false;
var a=new Array("1");b=new Array("1");console.log(a==b); false undefined var a=new Array("1");b=new Array("1");console.log(a===b); false undefined
事实上,要判断两个数组是否相等,只能将数组现转化为字符串,再比较字符串是否相等,需要调用toString()方法:
var a=new Array("1","2"), b=new Array("1","2"); console.log(a.toString()===b.toString()); true
var a=new Array("1","2"), b=new Array("1","2");console.log(a.toString()==="1,2"); true
更严格来说,如果两个数组中元素相同,但顺序不同,则需要先对数组进行排序,再对排序完成的数组进行比较:arr.sort().toString();
var a=new Array("1","2","tt"),b=new Array("1","tt","2"); console.log(a.toString()===b.toString()); false undefined var a=new Array("1","2","tt"),b=new Array("1","tt","2"); console.log(a.sort().toString()===b.sort().toString()); true undefined