上周收到汤姆大叔的赠书《JavaScript编程精解》(顺风快递哦,大叔果然给力),迫不及待浏览了下,首先看到是各种对该书原著的赞誉,非常期待接下来的阅读体验。读完第一章,已经非常吸引我持续读下去。因为书里的内容很对我的胃口——简明扼要,把握细节。 这里我把自己觉得很细节,很重要的部分记录下来,以方便今后的学习和查阅,当然也希望给正在学习javascript的朋友一些方便。
这里再次感谢大叔提供了这么好的javascript学习书籍,想学习javascript的同学,不要错过这本书哦 o(∩_∩)o
一,javascript基础
1.undefined和null:当使用var something;定义一个变量,alert(something)得到就是undefined。undefined和null主要是理论上的区别:null表示该值被定义,但是没有任何实际值。undefined==null返回true。
2.自动类型转换
下面几个判断都会返回true:false==0 ""==0 "5"==5 在多数情况下会将一个类型的值转化为另一个类型进行判断,但是当遇到null或者undefined的时候,只有两边都是null或undefined时才返回true。0,NaN和空字符串(""或者空白字符(串)" ")转化为false,其他所有的值都会转化为true。
如果不想发送任何类型的自动转化,可以使用另外的两个操作符:===和!==。分别表示精确相等和精确不等,此时,null===undefined,false===0,""===0,"5"===5都会返回false。
如果数字和字符串相乘,javascript会尝试将字符串转换为数字。如"Apollo"+5——>Apollo5,null+"ify"——>nullify,"5"*5=25,"zxf"*5=NaN.因为字符串不是数字,所以得到的结果也不是数字,NaN==NaN返回的是false,判断是否是数字可以用isNaN函数。
3.&&和||
||的作用:如果能将该值转化为bool,并且值为true,就返回左边的值,否则返回右边的值
&&的作用:当左边的值为false时,返回左边的值,否则返回右边的值。
另:只在必要时才执行表达式右边的值,例如true||X,不管X什么,结果都是true,因此X从来就没有被执行过。
4.函数
在C#等其他语言中,大括号是可以产生新的作用域的,但是在javascript中,函数是唯一可以创建新作用域的地方。如:
var a=0; if(true) { var a=1; } alert(a);
此时,内外a的值都是1.
4.1 函数值
javascript里面的所有东西都是值,包括function函数,可以像定义一个普通变量一样定义函数。如:
var a=null; function b(){alert("B");} (a||b)();
(a||b)()这里将"调用时不传参数"的操作符"()"应用到了(a||b)上,如果该表达式产生的不是函数,则会报错。用匿名的函数也可以:(a||function(){alert("B");})();
4.2 闭包
如果创建局部变量的函数调用不在栈上了,那局部变量会发生什么变化,如下:
function createFunction(){ var local=100; return function(){return local;}; } var a=createFunction(); alert(a());//输出100
调用createFunction()返回一个函数,这里赋给了a(体现了函数值的能力),a再加上"调用时不传参数"的操作符"()"执行返回的函数function(){return local;},local的值被保存了下来,javascript的这种特性成为闭包——包裹一些局部变量的一个函数叫做一个闭包。再如:
function makeAdder(amount){ return function(number){ return number+amount; }; }
var addTwo=makeAdder(2);
alert(addTwo(3));//输出5 这里因为闭包保存了amount这个变量的值
ps:感谢大叔这么简短有力的文字,让我对闭包有了更多的了解,之前看过一些关于闭包描述,都不是很清楚。现在好多了o(∩_∩)o