var f = functiong() { return23; }; typeof f;//function typeof f();//number typeof g;//undefined typeof g();//ReferenceError,g is not defined //""代表字符串 console.log(1+ "2"+"2");//122 console.log(1+ +"2"+"2");//32 console.log("A"- "B"+"2");//NaN2 console.log("A"- "B"+2);//NaN var x = newBoolean(false);//对象 //true if (x) { alert('hi'); } var y = Boolean(0);//值 //false if (y) { alert('hello'); }
变量
1 2 3 4 5 6 7 8 9 10
var a,b; (function(){ alert(a);//undefined alert(b);//undefined var a=b=3;//a是局部变量,而b是全局变量 alert(a);//3 alert(b);//3 })(); alert(a);//undefined alert(b);//3
创建数组
1 2 3 4
var arr=[1,2,3]; var arr=newArray(1,2,3); var arr=newArray(12);//如果只有一个数,代表数组的length是12个 var arr=newArray(0);//清空数组
//new操作, new obj 等价于 new obj() ,实例化一个对象,这时this指向obj,要拿到b.name的值 //需要保证name属性存在,属性查找原则是先查找当前实例有没有属性,如果有就直接使用,如果没有就到原型上面找,再没有就接着原型链一步一步,这里为了和a.name作属性区别,使用了if(name)有条件地构建this的属性name //所以,现在实例name属性提供给a使用,原型上的name提供给b使用。
//两个变体 functionobj(name){ //if(name){ this.name = name; //} returnthis; } obj.prototype.name = "name2"; var a = obj("name1"); var b = new obj;
console.log(a.name);//name1 console.log(window.name);//name1 console.log(b.name);//undefined // 这时b实例已经有属性name,但参数name为undefined ,所以这时可以把this.name属性删掉,这样就能去原型找name了 functionobj(name){ //if(name){ this.name = name; //} returnthis; } obj.prototype.name = "name2"; var a = obj("name1"); var b = new obj;
// 再试试 new obj('myName') 传个参数 functionobj(name){ //if(name){ this.name = name; //} returnthis; } obj.prototype.name = "name2"; var a = obj("name1"); var b = new obj('myName');