12. || 运用 || 运算符可以产生短路现象: var t,y,x=0,z=1,w={} ; var c = t || 0; //now c=0 var c = t || y || 0; //now c=0 var c = t || y || x || 0; //now c=0 var c = t || y || x || z || 0; //now c=z=1 var c = z || y || x || t || 0; //now c=z=1 var c = t || y || w || t || 0; //now c=w
13. Object 在 Javascript 中任何东西都是 Object. 下面是 Object 的表达式。 var x = {}; var y = { name: "Pete", age: 15 }; typeof {} // "object"
17. Array 例子: var x = []; var y = [1, 2, 3]; typeof []; // "object" typeof [1, 2, 3]; // "object“ 读取和写入值: x[0] = 1; y[2] // 3
18. 遍历: for (var i = 0; i < a.length; i++) { // Do something with a[i] } for (var i = 0, j = a.length; i < j; i++) { // Do something with a[i] } for (var i = 0, item; item = a[i]; i++) { // Do something with item } Array
19. Array Length 可以用来添加一个元素到 Array 的结尾,等同于 push 方法 var x = []; x.push(1); x[x.length] = 2; x // 1, 2
21. 未定义的变量和未赋值的变量 var s; console.log(d) //wrong,d is not defined console.log(typeof d) //undefined console.log(s) //undefined
22. typeof 和 constructor if ( typeof num == "string" ) num = parseInt( num ); if ( typeof arr == "string" ) arr = arr.split(","); if ( num.constructor == String ) num = parseInt( num ); if ( str.constructor == Array ) str = str.join(','); 变量类型检查 ——————————————————————————————— Variable typeof Variable Variable.constructor ——————————————————————————————— {an:"object"} “ object” Object ["an","array"] “ object” Array function(){} “ function” Function "a string" “ string” String 55 ” number” Number true “ boolean” Boolean new User() “ object” User ——————————————————————————————————
23. Function 例子: function named() {} var handler = function() {} (function(){ if(console) window.log=console.log })() var a = 1; setTimeout(function(){log(a);},1000);
26. Function Context 在 javascript 中, this 总是指导当前的上下文。默认是 window 对象。 var flashget=“flashget” console.log(window.flashget) // “flashget” 下面的例子, this 指到 id 为 t 的元素中去了 Object.prototype.getHTML =function(){ if(this['nodeName']) console.log(this.innerHTML); } document.getElementById("t"). getHTML();
27. Function 改变函数上下文的示例 function changeColor( color ) { this.style.color = color; } //wrong,because window desn't hava style attribute changeColor( "white" ); var main = document.getElementById("main"); changeColor.call( main, "black" ); function setBodyColor() { changeColor.apply( document.body, arguments ); } setBodyColor( "black" );
28. Function Scope (作用域) 作用域是 JavaScript 中一个较难处理的特性。所有面向对象的编程语言都有某种形式的作用域;这要看是什么上下文约束着作用域。在 JavaScript 里,作用域由函数约束,而不由块约束 ( 如 while,if, 和 for 里的语句体 ) 。 var v = "globe"; function scope() { console.log(v) //undefined var v = "in a function“; console.log(v); //in a function } scope() console.log(v) //globe
29. Function 虽然在全局变量中可以不使用 var ,但是在局部变量中一定要使用 var ,下面代码可以说明问题。 var v = "globe"; function scope() { console.log(v); // globe v = "in a function" console.log(v); // in a function m = "in a function define a globe“ } scope() console.log(v) //in a function console.log(m) // in a function define a globe
30. Function Closures (闭包) 闭包意味着内层的函数可以引用存在于包绕它的函数的变量,即使外层的函数的执行已经终止。 也意味着内层的函数可以创建外面不可访问的变量和方法。 var obj = document.getElementById("main"); obj.style.border = "1px solid red"; setTimeout(function(){ obj.style.display = 'none'; }, 1000); function delayedAlert( msg, time ) { setTimeout(function(){ alert( msg ); }, time ); } delayedAlert( "Welcome!", 2000 );
31. Function Closures (闭包) 使用匿名函数激发一个创建多个闭包函数所需的作用域的例子 : var items = document.getElementsByTagName("a"); for ( var i = 0,item; item = items[i]; i++ ){ (function(){ var href = item.getAttribute("href"); item["onclick"] = function(){ console.log( href ); return false; }; })(); item.setAttribute("href","#"); }