javascript基础之一

上周收到汤姆大叔的赠书《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

作者:张雪飞
出处:https://zhangxuefei.site/p/95
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

发表评论

电子邮件地址不会被公开。 必填项已用*标注