早已接触javascript多年之后,竟然还有这些概念混淆不清,毫不知情,说出来真实无地自容 !
1、使用严格模式,“use strict”,虽然不适用,但是要知道,以免别人使用时,碰到后摸不着头脑!
2、js只有五中基本类型和一种复杂类型,Undefined,String,Number,Boolean,Null 和Object。typeof 返回的都是小写类型,e.g: j null == 'object'
3、var 声明变量未初始化时,变量就是undefined。 null 是一个指向空对象的指针。所以,typeof null = 'object'. 但是undefined派生自null。 null==undefined 是true
5、Object是所有对象的基础,每个对象都具有下列属性和方法:constructor,hasOwnProperty(propertyName)-是否存在某属性,isPrototypeOf(object)-检查传入的对象是否是对象的原型,propertyIsEnumerable(propertyName)-用于检查给定的属性是否能够使用for-in来枚举,toLocaleString(),toString(),valueOf()等。
6、理解参数问题:函数的参数是通过一个参数数组来接收参数的arguments。函数的定义和调用的时候,参数没什么关系,如果定义时写了参数就是可以显示的使用参数。否则,通过arguments[0],arguments[1]等依然可以实现相同的效果。调用时参数传递不够的,后面的自动赋值为undefined。如果多传递的可以通过下标访问arguments获得。还有重要的一点就是:arguments的值始终与对应命名参数的值保持同步,即可以通过改变arguments里的值,修改传递进来的参数值。
测试代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> </head> <body> <script type="text/javascript" language="javascript"> var testUndefined; alert(testUndefined); alert(testUndefined == null); alert(typeof null); alert(typeof undefined); var obj = {}; obj.name = 'wch'; obj.pwd =132; alert(obj.hasOwnProperty('name')+":"+obj.hasOwnProperty('id')); alert(obj.toString()+" : "+obj.valueOf()+' : '+obj.toLocaleString()); alert(obj.propertyIsEnumerable('name')+' : '+obj.propertyIsEnumerable('pwd')); function sum(){ var sum = 0; for(var i=0; i< arguments.length; i++){ if(i==3){ arguments[3] = 10; } sum+=arguments[i]; } return sum; } alert(sum(1,2,3)+' : '+sum(10,20,30,60)); </script> </body> </html>