13年的时候就买了《JavaScript 高级程序设计 》(第3版)和Jquery的书,平时偶尔也看一两眼,没系统的看,今年定下的目标是学习web,所以打算系统的学习一下。写下JavaScript系列的博客也算是笔记,以后好复习。内容也是按照《JavaScript 高级程序设计 》(第3版)的顺序总结,今天总结javascript的一些基本概念。
1.区分大小写(这个不用解释)
2.命名规则
一般用字母、数字、下划线或美元$符号。第一个字符必须是字母、下划线或美元符号$.
3.语句
语句结尾可以省略分号,但为了让编码易读,减少错误,尽量加上分号。
4.变量
变量是松散类型,可以保存任何类型的数据。声明变量尽量用var来声明,否则变量就会变成全局变量。同时不能定义名为eval和arguments的变量,否则会导致语法错误。
5.数据类型
主要包括5种基本数据类型 :Undefined、Null、Boolean、Number 和String。还有一个复杂数据类型:Object.
1).Undefined类型
只有一个值undefined,在使用var声明变量但未对其进行初始化,则该变量的值就为undefined。即定义变量的默认值是undefined.
2).Null类型
它也只有一个值null,它表示一个空对象指针,如果变量用来保存对象,最好将变量初始化为null。这样只要坚持这个变量是否为null值就能判断变量是否被保存对象的引用。
3).Boolean类型
这个略。
4).Number类型
这里主要是有两个内容:NaN和数值转换。
1.NaN:非数值,表示要返回数值的操作数未返回数值的情况。比如X/0=NaN。
它主要有两个地方比较特殊:1.任何涉及NaN的操作都返回NaN。2.Nan与任何值(包括NaN)都不相等。那如何判断一个值是不是非数值呢?这里有一个函数isNaN(),传入一个任意类型的参数,如果不能被转化为数值则返回true。
2.数值转换
主要有3个函数:Number()、parseInt()、parseFloat(). 后两个主要是用来把字符串转数值。
Number()转换规则:
如果是Boolean值,ture变1,false变0;
如果是数字,简单传入传出;
如果null,返回0;
如果是undefined,返回NaN;
如果是字符串:
1.只包含数字(包括前面带正号、负号):转为10进制数,前面的0去掉 如:"011"变为11;
2.包含有效浮点数,转为浮点数
3.有效十六进制转为同等大小的十进制
4.字符串是空,转为0
5.如果包含除上述以上格式的字符串,则转为NaN
6.如果是对象,则调用对象的valueOf(),依照前面规则转换返回的值,如果转换结果为NaN,则调用对象的tostring(),然后按照前面的规则转换。
5).String类型
字符串是不可变的,一但创建,值不会改变。要改变首先销毁原来的字符串,然后用新的变量填充。
字符串转换是常用的有两种方法:tostring()、String().但null、undefined没有。
数值、布尔值、字符串都有tostring()方法。多数情况不需要传递参数,在调用数值的tostring()方法时,可以传递一个参数:输出数值的基数,默认是10进制.
6).Object类型
对象可以通过new操作符创建,可以为其添加属性和方法来自定义对象。
Object的每个实例都有以下属性和方法:
Constructor :保存着用于创建当前对象的函数。构造函数。
hasOwnProperty(propertyName) :用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。作为参数的属性名必须以字符串形式指定。
isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。也是要用字符串指定参数。
toLoacleString():返回对象的字符串表示。
tostring():返回对象的字符串表示。
valueof():返回对象的字符串、数值或布尔值表示。
6.typeof操作符
由于是松散类型,因此需要有一个方法检测给定变量的数据类型typeof.对一个值使用typeof操作符可能返回下列某个字符串:
"undefined" :未定义
"boolean" :布尔值
"string" :字符串
"number" :数值
"object" :对象或null
"function" :函数
7.操作符
1)、递增递减操作符
1.对于字符串来说能转数字的转数字然后进行加减操作
2.对于布尔值,转为0、1在加减操作
3.浮点直接加减
4.对于对象先valueof()或tostring()在进行前面的加减操作。
2)、一元加、减
+放在数值前面没影响。对于非数值时,按照number()转换规则。
3)、布尔操作符(与、或、非)
1. 逻辑非操作符先将操作数转为布尔值再对其求反。
逻辑非转换成布尔值的规则:若操作数为对象、非空字符串、非0数值则转为true,其他为false。
2.逻辑与
(1)对于布尔值,逻辑与是非常简单的,只要有一个false,就返回false;
(2)对于不是布尔值的情况则:
如果第一个操作数是对象,则返回第二个数
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
如果第两个操作数都是对象,则返回第二个数操作数
如果有一个操作数是null,则返回null
如果有一个操作数是NaN,则返回第NaN
如果第一个操作数是undefined,则返回unfined
(3)对于逻辑与的短路问题:
<script type="text/javascript">
var found=true;
var result=(found && someUdefinedVariable);
alert(result);//显示someUdefinedVariable
//例子中的found为true,所以会对someUdefinedVariable继续求值,但是该变量未定义,所以会提示错误
</script>
<script type="text/javascript">
var found=false;
var result=(found && someUdefinedVariable);
alert(result);//显示false
//例子中的found为false,所以第一个操作数就已经能够决定结果,就不会在对第二个操作数求值
</script>
3.逻辑或(||)
(1)对于布尔值,逻辑或是非常简单的,只要有一个true,就返回true;
(2)对于不是布尔值的情况则:
如果第一个操作数是对象,则返第一个操作数
如果第一个操作数的求值结果为false,则返回第二个操作数
如果两个操作数都是对象,则返回第一个操作数
如果两个操作数是null,则返回null
如果两个操作数是NaN,则返回NaN
如果两个操作数是undefined,则返回undefined
<script type="text/javascript">
var found=true;
var result=(found || someUdefinedVariable);
alert(result);//弹出true
//对于逻辑与,当一个为true的时候,就不会在对第二个操作数进行求职了
</script>
7.函数
在学习Node.js中看到函数这块,就把js中的函数也复习一下。函数在各个编程语言中都会存在。在Js中的函数和C#、Java这些还是有区别的。
一、函数
1.Js中用function来声明函数.
2.函数定义不必指定返回值。任何函数在任何时候都可以通过return后跟要返回的值来实现返回值。推荐的做法是要么都有返回值要么都没有返回值。
3.不能将函数、参数命名为eval和arguments,同时不能出现两个命名参数同名的情况。
二、参数
1.js中函数不介意传递多少个参数以及参数的数据类型。之所以会这样,是因为js中的参数在内部是用一个数组来表示的,函数接收的始终是这个数组。实际上在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。可通过arguments[index]来获取对应索引的值,通过length属性来获取参数个数。
2.arguments的值永远与对应命名参数的值保持同步。修改arguments的值命名参数的值就会随之改变,但修改命名参数的值不会改变arguments对应的值。
3.如果传入一个参数,argmuents[1]设置的值不会反应到命名参数中,因为arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。
4.对于没有传递值的命名参数将自动被赋予undefined值。
5.js中所有的参数传递的都是值,不可能通过引用传递参数。
三、没有重载
js中没有重载,如果定义了两个名字相同的函数,则该名字只属于后定义的函数。