javascript - 学习笔记1
<注:>此笔记并不是对javascript的详细记录,它记录的是我在《javascript权威指南第三版》看到的并认为比较有意思的javascript的特征。(javascript1.2)
1。 javascript与java特性集合不相交。javascript可以控制浏览器行为和内容,java可以进行绘图、联网、多线程。javascript可以与嵌入在网页中的Applet进行交互,并且能对Applet进行控制,从这一意义上说javascript可以脚本话java。
2。 在掌握了javascript语言的核心后,在网页中有效使用js的关键就是,学会使用浏览器显示出来的文档。
3。 许多js中的对象和属性与所代表的HTML的标签和属性同名,但是js中他们通常都是小写的。
4。 js中的八进制数值以0开头,十六进制数值以0X或0x开头。
5。 非数字值NaN isNaN(),正无穷Infinity,负无穷-Infinity。
6。 函数直接量:var square = function(x){ return x*x; }
7。 函数的调用过程:使用"."语法将函数值从对象中提取出来,再使用"()"语法调用那个函数。
8。 对象的关联数组用法: image["width"] 。
9。 创建对象:
point.x = 2.3;
point.y = -1.2;
10。对象直接量:var point = {x : 2.3, y : -1.2};
11。数组和对象都是数值的集合,不同的是对象中每个数值都有一个名字,而数组中每个数值都有一个下标。
12。数组的创建:
a[0] = 1.2;
a[1] = "JavaScript";
a[2] = true;
a[3] = {x:1, y:3};
13。数组直接量:var a = [1.2, "JavaScript", true, {x:1, y:3}];
14。undefined 代表一个不存在的或者还没有负值的变量或者属性。
15。再给一个没有声明的变量负值时,会自动用那个变量名创建一个全局变量。
16。对于js来说把所有的变量声明集中起来放在函数的开头是个好的程序设计习惯。如果在函数末尾声明,那末这个变量在整个函数中都是undefined,不管这个变量是不是负值后的全局变量。
17。原始类型:数值、布尔值、null、未定义的值。
18。引用类型:对象、数组、函数。
19。字符串具有这两种类型的性质。
20。window对象是所有javascript代码的全局对象。全局变量是这个全局对象的属性。
21。值的等同性(==)隐式类型转换规则见"表达式和运算符"。
22。全同运算符(===)比较不做类型转换。undefined不等于null。
23。typeof value; 返回运算符的类型。
24。constructor属性是对创建对象的构造函数的引用。可以用于检测对象的类型。
25。if(form.greeting === (void 0))可以用void 0 代表undefined来做比较。
26。for/in用于遍历对象的所有可能的属性。但是只包括用户定义的类型,不能枚举出某些预定义的属性和方法。For(prop in myObject)
27。break lablename; 跳出到标签处。
28。function语句。function f(a,b){return 1;}定义了一个新的函数对象,并把这个对象负给变量f。
29。Function构造函数。var f = new Function{"x", "y", "return 1;"}Function()构造函数允许动态的建立和编译一个函数,每次调用时都要对它们进行重新编译。这种方法创建的函数被当作顶级函数来编译。在函数体内部定义时,不遵循静态作用域规则。Function()构造函数能将函数定义为js表达式的一部分,而不是一个语句。
30。函数直接量。var f = function(x,y){return 1;}匿名函数,名字是"anonymous"。
31。函数的用法:
b.sort(function(x){return x*x;});//定义一个函数,并把它当作参数
var tens = (function(x){return x*x;})(10);//定义并调用一个函数。
32。Function()构造函数创建的函数主体是一个字符串,而函数直接量的主体是标准的javascript语法。
33。arguments函数的实际参数对象。
arguments.callee当前正在执行的函数。在匿名函数中调用自身。
arguments.caller当前函数的调用函数的实际参数对象。
34。定义函数的属性:docheck.counter=0; function docheck(){retrun docheck.counter++;}(函数自己的全局变量,对于构造函数就是类变量、类方法)类方法只对它的参数进行操作,不能使用this关键字。
35。Object.prototype.toString.apply(obj, [1,2]);该方法可以在obj对象调用其它任何的对象的方法。call()方法与apply()方法相似,只不过传递给函数参数时使用的是参数列表而不是参数数组。
36。delete book.chapter2; delete可以真正的删除对象的属性。
37。book.chapter2 = book.No_such_property;把一个不存在的属性负给它,从而使它的值变为未定义的。
38。构造函数:它是由new运算符调用的。用this引用新创建的空对象,并且要对新对象的属性及方法进行适当的初始化。
39。this是对调用这个方法的对象的引用。
40。函数和方法的区别是,方法用来对this对象进行操作,而函数通常独立运行,不使用this。
41。构造函数的prototype属性设置对象的原型对象(不是"原型类",设置的是一个对象)。新对象继承原型对象的所有属性。
42。Function Circel(x){this.x =x;} Circel.prototype.pi = 3.14;通过这中方法添加Circle类的实例方法属性,这些将被这个类的所有实例继承。
43。原型对象的属性是被类的所有对象共享的,所以通常只用它来定义对类的所有的对象都相同的属性。这个属性的继承只发生在读取属性时,而在写属性时新对象创建这个属性值,不会写原型对象的属性。
45。Object对象的toStirng()、valueOf()方法提供了可覆盖的自定义实现方式。
46。自定义类的子类化:MoreComplex.prototype = new Complex(0,0); MoreComplex.prototype.constructor = MoreComplex;新类是继承了Complex的对象的所有属性的。同时要设置新类的prototype.constructor属性,使它可以正确找到prototype的构造函数。
47。对象的watch、unwatch方法用于设置某个属性的观察点。
48。执行这些代码:a = new Array(); a[0] = 1; a[10000] = "element 10,000"; 数组的length为10001。但是不给下标在0到10000之间的9999个元素分配内存。数组是稀疏的。
49。设置数组的length属性是真正删除数组元素的唯一方法。Delete不会改变数组的length属性。
50。正则表达式直接量:var pattern = /s$/;
51。RegExp()构造函数:var pattern = new RegExp("s$");
52。js的函数是在定义他们的作用预中执行的,而不是在执行他们的作用预中执行的。例外的是RegExp对象的静态属性的作用预是动态的。
53。显示的类型转换:String(x)、Number(x)、Boolean(x)、Object(x)。parseFloat()、parseInt()。
54。css隶属于documnet对象,而<script>属于window对象。