待解问题:
1.JavaScript中in操作符的使用
2.在JavaScript中哪些对象是有length属性的
3.js中underfined === underfined,null===null,NaN===NaN吗
4.javascript中的操作符+,-,in,instanceof,typeof,new等
5.一般对象拥有的属性和方法
6.prototype 到底是什么
7.Arguments对象
8.hasOwnProperty和isPrototypeOf的区别
简单总结:
1)+操作符:+除了作为加法和连接符外,还可以作为一元运算符使用,比如+5,+”3”,+”33dd”,+obj等,它的作用是将后面尽可能的转换为数字,如果不能则为NaN。在underscore.js中,判断类数组的方式是一种鸭式类型obj.length === +obj.length。
2)-操作符:和+类似,除了作为减法使用,也可以作为一元运算符使用
3)in操作符常用方式有两种,一个是判断if(‘Lastname’ in myObject){},该对象是否有该属性,另一个是遍历for(var key in myObject),一般不建议数组这样遍历,为什么不知道?in操作符需要注意的点:in的右边必须是一个对象,左边是对象的属性,该属性如果不是固有属性(如length),必须引号括起来;如果是固有属性可以直接写。如果右边的对象是数组对象,左边必须是数组的下标。
4)typeof:typeof是一元操作符,返回值是字符串。typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。在JavaScript语言精粹一书中也同样指出,这样是没有任何意义的。这本书中也给出了更好的判断数组的方式Object.prototype.toString.call(arr)====’[object Array]’,这种方式也在许多框架中见到。
5)instanceof:
6) new:
7) js中underfined === underfined,void===void,NaN===NaN吗
①void 0 === void 1 为true,underfined === underfined 成立
②var a=null,b=null;a===b为true, null===null成立
③+”a” === +”a”为false,NaN===NaN不成立
8)hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。
isPrototypeOf是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。
参考资料:
arr.length === + arr.length鸭式讨论
http://segmentfault.com/q/1010000000510887
js如何判断一个对象是不是数组(其中指出instanceof 判断数组的局限性)?
http://www.nowamagic.net/librarys/veda/detail/1250
JavaScript中in操作符
http://blog.csdn.net/slalx/article/details/5910587
javascript:typeof与instanceof区别
http://www.cnblogs.com/jikey/archive/2010/05/05/1728337.html
JavaScript instanceof 运算符深入剖析
http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/
附录(摘自网络):
######**typeof**######
typeof(1): number
typeof(NaN): number
typeof(Number.MIN_VALUE): number
typeof(Infinity): number
typeof(“123”): string
typeof(true): boolean
typeof(window): object
typeof(Array()): object
typeof(function(){}): function
typeof(document): object
typeof(null): object
typeof(eval): function
typeof(Date): function
typeof(sss): undefined
typeof(undefined): undefined