参考资料:《javascript权威指南第五版》
===============变量==============
1、javaScript是一种弱类型的语言,用var语句即可声明一个变量。
2、如果不用var语句声明而直接给一个变量赋值,那这个变量将被隐式声明为全局变量。
3、如果函数内部用var语句声明了一个与某全局变量同名的变量,则在函数中全局变量被屏蔽了,即使这个变量的定义是在函数的
最后一行。
4、我们可以在for语句中定义变量,如for(var i=0;i<10;i++),在其它的一些语言中,这里的i在退出循环后生命就结束了,但
javascript中,i在包含它的整个函数中可用。
==============运算符=======
1、取模运算符%一般用于整数,但在浮点数中也适用。-4.3%2.1=-0.1。另外,取模运算后的结果的符号和第一个运算数保持一 致。
2、==(相等)与===(完全等同)。对于基本类型,若参与比较的双方类型不同,前者会先转换类型至一致再比较,而后者不
会。注意的是值NaN永远不与任何值等同,需用isNaN()来测试一个值是否NaN。
3、in运算符。如A in B。它用来判断A是否B自己的或继承来的一个属性。A必须是字符串或可以转换成字符串,B必须是对象或者
数组。如果A或B不符合要求则会发生运行时错误,如果A不是B的属性,返回false。
4、instanceof运算符。如A in B。它用来判断A是否B中的一个实例,返回布尔值。A必须是一个对象,B必须是一个对象类的名
字或者说构造函数。如果左边不是对象或右边是对象但不是构造函数,将返回false,如果右边根本不是对象,则产生运行时错
误。
5、逻辑与&&和逻辑或||。如A && B。当A的计算结果是可以转换成false的值,则返回A的计算结果,否则计算B的值返回。
A || B也一样返回相应表达式的计算结果。但在javascript1.0和1.1中,返回值是布尔值。
6、typeof返回任意运算数的类型。但它只能区分运算数是基本类型还是对象,因为对所有对象包括null它都返回object。对基本
类型,它分别返回number、string、boolean。对函数它返回function,对未定义的值,它返回undefined。
7、delete运算符删除指定的对象属性、数组元素或变量。用var语句声明的变量是不可用delete删除的。删除成功时返回true,
不成功时返回false。但如果运算数是一个不存在的东西,也会返回true。
另外,如果运算数是一个引用,delete只会删除引用,而不会删除实际被引用的对象。还有delete操作数组元素时,只是将
元素的值设为undefined,而操作属性时是真正删除,用for in将无法再列举出这个属性。
8、void运算符。它总是会舍弃运算数的值而返回undefined。这一特性在javascript:URL中常用到。
=============语句===========
1、函数定义在解析时发生,而变量定义是在运行时。看以下代码:
alert(typeof(a));//显示undefined;因为a还没有定义。
alert(f(4));//显示16,虽然定义的代码写在后面,但在解析时已经定义好了,所以可以找到函数并执行。
var a = 8;//此时定义a
var f = 0;//重写变量f
function f(x){return x*x};
alert(f);//执行到这里时f已被重写,显示0
alert(a);//显示8
2、如果一个函数定义里没有写return语句,则相当于返回undefined。
============对象和数组==========
1、每个对象都有一个constructor属性,属性的值就是这个对象的构造函数。自己创建的所有对象的constructor属性值都是
Object函数。函数和数组也是对象,它们的constructor属性值分别是Function和Array。
2、数组中的元素不一定要一个挨一个的存储,长度为5的数组a,可以只在a[0],a[4]处有值,只有定义了值的格子才会得到空
间。另外,length的值是可写的。如果想删除数组尾部的一些数据,可以将length设短即可。如下代码:
var arr = new Array(1,2,3,4,5,6,7);//定义数组
for(var i=0;i<arr.length;i++)//打印数组,结果为1234567
document.write(arr[i]);
document.write("<br />");
arr.length = 3;//将数组长度设为3
for(i=0;i<arr.length;i++)//再打印数组,结果为123
document.write(arr[i]);
document.write("<br />");
arr.length = 7;//再将长度设回成7
for(i=0;i<arr.length;i++)//再打印数组,结果为123undefinedundefinedundefinedundefined
document.write(arr[i]);
document.write("<br />");
3、常用的数组方法
var arr = new Array(1,2,3,'hello');
arr.join('-');结果为1-2-3-hello。将有值的数组元素转换成字符串并以指定的分隔符将它们联起来,如果不指定,默认是逗号。
arr.reverse();结果为['hello',3,2,1]。在原数组上而不是新建一个数组来颠倒数组元素顺序。
arr.sort();在原数组上而不是新建一个数组来将元素排序,默认是将所有元素转成字符串再按首字母从小到大排序。普通对象转换成字符串后结果是[object Object],取'['参与排序。可以接受一个自定义的函数作为参数来改变排序方式。
arr.concat(4,5);结果为[1,2,3,'hello',4,5]。它能创建并返回新数组,原数组不变。
arr.slice(0,3);结果为[1,2,3]。参数分别指定起始位置和结束位置(结束位置的值不取)。它返回获取到的数组片段。参数可以为负,表示倒数第几个。原数组不变。
arr.splice(1,2,8,9);返回值为[2,3]。它删除并插入元素。前两个参数分别指定要删除的起始位置和元素个数。它取出原数组相应的值给新数组,并删除原数组中相应的值。在两个参数之后的参数就是要插入到原数组中的值,插入的位置由第一个参数指定。此时arr的值为[1,8,9,'hello']。