【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)

时间:2021-12-19 16:35:33
第一章 javascript概述
①.javascript是一种松散类型语言;也是一种解释型语言;
第二章 词法结构
①.大小写敏感
第三章 数据类型和值
①.isFinite()函数:用来检测一个数字是否为NAN,正无穷大或负无穷大;
②.特殊数值的常量
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
③.字符串的使用
charAt(n):获取字符串第N个字符;
eg:s=s.charAt(s.length-1)//获取字符串S的最后一个字符.
substring(a,b):从字符串中抽出第a到b之间的字符.
eg:s=s.substring(1,4)//抽出第2,3,4个字符.
indexof('a')//从s字符串中查找第一个"a"的位置.
④.把数字转换为字符串
toFixed()方法:把一个数字转换为字符串,一个参数表示显示小数点后的指定的位数.它不使用指数表示法.
toExponential():使用指数表示法把一个数字转换为字符串,小数点前面1位数,而小数点后面有指定的位数.
toPrecision():使用指定的有意义的位数来显示一个数字,如果有意义的位数还不够显示数字的整体整数部分,它就使用指数表示法.
eg:
. n.toFixed();                       );                       );            );            );                 );                 //"123456.8"
⑤.把字符串转换为数字
1.把一个字符串减去0就可以将其转换为一个数字.//注意不能用加.
2.■■■■■■■■■■
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
⑥■■■■■■■■■■
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
另一中方法是使用布尔非运算符两次:
eg: var x_as_boolean = !!x;
⑦Date对象
var now=new Date();//获取当前时间
var xmas=new Date(2006,11,25);//设置时间为2006年11月25日
⑧正则表达式
可以使用RegExp()构造函数来创建它;或者直接使用"//"来创建它.
⑨Error对象
每个Error对象具有一个message属性,它存放的是javascript实现特定的错误消息.
第四章 变量
数据类型分为两组,即基本类型和引用类型
第五章 表达式和运算符
①.全等运算符(===):表示不转换数据类型等于,又称为严格等于运算符.
    不全等运算符(!==):表示不转换类型不等于,又成为严格不等于运算符.
②.如果对象可以被转换成数字或字符串,javascript将执行数字转换.例如,可以从数字的角度比较Date对象,也就是说,比较两个日期,以判断哪个日期早于另一个日期是有意义的.
③.in运算符
in运算符要求其左边的运算符是一个字符串,或可以被转换为字符串,右边的运算数是一个对象或数组.如果该运算符左边的值是其右边对象的一个属性名,它返回true.
eg:
, y }; var has_x_coord= "x" in point;//true var has_y_coord= "y" in point;//true var has_z_coord= "z" in point;//false var ts = "toString" in point;//true
④.instanceof运算符
instanceof运算符要求其左边的运算数是一个对象,右边的运算数是对象类的名字.如果该运算符左边的对象是右边类的一个实例,它返回true,否则返回false.
⑤.typeof运算符
它的返回值是一个字符串,该字符串说明了运算数的类型.
⑥.delete运算符
delete运算符是个一元运算符,它将删除运算数所指定的对象的属性,数组元素或变量.如果删除操作成功,它将返回true,如果运算数不能被删除,它将返回false.delete所能影响的只是属性值,并不能影响这些属性引用的对象.(该运算符把一个数组元素设置为undefined值,但元素本身还继续存在的)
⑦.void运算符
它总是舍弃运算数的值,返回undefined,用途是专门生成undefined值.
第六章 语句
①.for/in语句
迭代(相当于C#的foreach)
for( variable in object)
{statement}
②throw语句
在javascript中,当发生运行时错误或程序明确地使用throw语句时就会抛出异常.
第七章 对象和数组
①■■■■■■■■■constructor
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
②■■■■■■■■■■isPrototypeOf()
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
③.删除数组元素
Array.shift()方法删除掉数组的第一个元素;
Array.pop()方法删除掉数组最后一个元素;
Array.splice()方法从一个数组中删除一个连续范围内的元素
④数组的长度
属性length总是比数组的最大元素的数多1.
数组下标必须小于(2^32)-1,这意味着length属性的最大值为(2^32)-1
⑤数组的方法
join()方法:可以把一个数组的所有元素都转换为字符串,然后再把它们连接在一起.
eg:
var a = [1, 2, 3];
var s = a. join(", ");//s=="1, 2, 3";逗号后面有空格
该方法与String.split()方法相反,后者是通过将一个字符串分割成几个字段来创建数组
reverse()方法:将颠倒数组元素的顺序并返回颠倒后的数组.
eg:
var a = new Array(1, 2, 3);
a.reverse();
var s=a.join();//s=="3,2,1,"
//不用该方法实现这种效果
    <script type="text/javascript">
        var arr = new Array();
        var i, k;
        arr = [1, 2, 3, 4, 5, 6];
        for (i = 0; i < arr.length / 2; i++) {
            k=arr[i];
            arr[i] = arr[arr.length - i - 1];
            arr[arr.length - i - 1] = k;
        }
            alert(arr);
    </script>
sort()方法:在原数组上对数组元素进行排序,返回排序后的数组.默认是按照字母顺序对数组元素进行排序
concat()方法:能创建并返回一个数组,这个数组包含了调用concat()的原始数组的元素,其后跟随的是concat()的参数.
eg:
var a = [1,2,3];
a.concat(4, 5);//[1,2,3,4,5]
a.concat([4,5]);//[1,2,3,4,5]
a.concat([4,5],[6,7]);//[1,2,3,4,5,6,7]
a.concat(4,[5,[6,7]]);//[1,2,3,4,5,[6,7]] 说明concat()并不能递归地展开一个元素为数组的数组.
slice()方法:返回指定数组的一个片段,或者说是子数组.它的两个参数指定了要返回的片段的起止点(不包含第二个参数指定为止的元素).
如果只传递一个参数,则表示返回从该参数起到原数组结束的所有元素.
如果两个参数中有一个是负数,则它所指定的是相对数组中的最后一个元素而言的元素.
eg:
var a = [1,2,3,4,5];
a.slice(0,3);//[1,2,3]
a.slice(3);//[4,5]
a.slice(1,-1);//[2,3,4]
a.slice(-3,-2);//[3]
splice()方法:插入或删除数组元素的通用方法.第一个参数指定了要插入或删除的元素,第二个参数指定了要从数组中删除的元素个数.
如果第二个参数被省略了,那么将删除从开始元素到数组结尾处的所有元素.该方法返回的是删除了元素之后的数组.
eg:
var a =[1,2,3,4,5,6,7,8];
a.splice(4);//Returns [5,6,7,8] a=[1,2,3,4]
a.splice(1,2);//Returns [2,3] a=[1,4](续上)
a.splice(1,1);//Returns [4] a=[1]
两个基本参数之后可以有任意多个额外的参数,它们指定的是从第一个参数指定的位置处开始插入元素.
eg:
var a = [1,2,3,4,5];
a.splice(2,0,'a','b');//Returns []; a=[1,2,'a','b',3,4,5]
a.splice(2,2,[1,2],3);//Returns ['a' 'b']; a=[1,2,[1,2],3,3,4,5](和concat()方法不同,splice()并不将它插入的数组参数展开)
push()方法和pop()方法
push()方法:可以将一个或多个新元素附加到数组的尾部,然后返回数组的新长度.
pop()方法:恰恰相反,它将删除数组的最后一个元素,减少数组的长度,返回它删除的值.
附加或者删除的元素若是数组也不被展开
unshift()方法和shift()方法
unshift()方法:将一个或多个元素添加到数组的头部,然后把已有的元素移动到下标较大的位置以腾出空间,它返回的是数组的新长度.
shift()方法:删除并返回数组的第一个元素,然后将后面的所有元素都向前移动以填补第一个元素留下的空白.
forEach()方法:它为数组中的每个元素调用一个指定的函数.
map()方法:它返回将数组中的每个元素传递给一个指定的函数所获得结果的数组.
第八章 函数
①.可选参数
当调用一个函数的参数少于声明的参数个数的时候,其他的参数就有一个undefined的值.
②a=a||[];判断a是否为空.可在函数第一行使用,用来判断参数是否为空.
③可变长度的参数列表:Arguments对象■■■■■■■
arguments对象为javascript函数开发了一项重要的可能性,即可以编写函数使之能够使用任意数目的实际参数.这样的函数叫做可变参数函数.
eg:亲测可用
    <script type="text/javascript">
        function max() {
            var m = Number.NEGATIVE_INFINITY;//表示负无穷大的特殊值,查看笔记第三章②
            for (var i = 0; i < arguments.length; i++) {
                if (arguments[i] > m) m = arguments[i];
            }
            return m;
        }
        alert(max(1,3,2,4,5,5,144));
    </script>
④Arguments对象的callee属性
用来引用当前正在执行的函数,可以用来允许对未命名的函数递归地调用自身.
eg:计算阶乘:
        function(x) {
            if (x <= 1) return 1;
            return x * arguments.callee(x - 1);//调用自身函数
        }
⑤属性prototype
每个函数都有一个prototpe属性,它引用的是预定义的原型对象.原型对象在使用new运算符把函数作为构造函数时起作用.
⑥自定义函数属性
eg:
        //任意数取最大值
        function max() {
            var m = Number.NEGATIVE_INFINITY;
            for (var i = 0; i < arguments.length; i++) {
                if (arguments[i] > m) m = arguments[i];
            }
            return m;
        }
        max.as = 0;//自定义函数属性
        alert(max(1, 3, 2, 4, 5, 5, 144));//144
        alert(max.as); //0
⑦方法apply()和call()
这两个方法可以像调用其他对象的方法一样调用函数.这两个方法的第一个参数都是要调用的函数的对象.在函数体内这一参数是关键字this的值.
call()的剩余参数是传递给要调用的函数的值.
apply()方法和call()相似,不过要传递给函数的参数由数组指定.
eg:
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
第九章类,构造函数和原型
①原型
javascript对象从它的原型那里继承属性.
在创建了一个空对象以后,new设置了这个对象的原型,一个对象的原型就是它的构造函数的prototype属性的值.所有的函数都有一个prototype属性,当这个函数被定义的时候,prototype属性自动创建和初始化.prototype属性的初始化是一个对象,这个对象只带一个属性constructor,指回到和原型相关联的那个构造函数.
②用Object.hasOwnProperty()可以来区分继承的属性和常规的属性.
eg:
        function rectangle(w, h) {
            this.width = w;
            this.height = h;
        }
        rectangle.abc = 0;
        rectangle.prototype.area = function() { return this.width * this.height; }
        var r = new rectangle(2, 3);
        alert(r.hasOwnProperty("width"));//true
        alert(r.hasOwnProperty("area")); //false
        alert(r.hasOwnProperty("abc"));//false
        alert(rectangle.hasOwnProperty("width")); //false
        alert(rectangle.hasOwnProperty("area")); //false
        alert(rectangle.hasOwnProperty("abc"));//true
        alert("abc" in r);//false
        alert("area" in r);//true
        alert("abc" in rectangle); //true
        alert("area" in rectangle);//false
③扩展内建类型
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
④javascript是面相对象语言
面向对象程序设计语言的共同特定是,它们都是强类型的,并且支持基于类的继承.根据这一标准,我们很容易把javascript划定为不是真正的面向对象语言.另一方面,可以看到javascript大量地使用对象,并且它有自己的基于原型的继承.javascript是一种真正的面相对象语言.它采用于原型的继承而不是基于类的继承.
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
with语句会影响性能,尽量避免使用.
⑥compareTo()方法
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
超类和子类,参考别的书吧
第十章 模块和名字空间
①一个模块不应该为全局名字空间添加多于一条的标记.
第十一章 使用正则表达式
①在javascript中,正则表达式由RegExp对象表示.也可以直接用//来包含.
②正则表达式的直接量字符
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
③正则表达式的字符类
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
④正则表达式的重复字符
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
⑤正则表达式的选择,分组和引用字符
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
⑥正则表达式的锚字符
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
⑦正则表达式的标志
【JavaScript权威指南(第五版)】笔记之第一部分 核心javascript (第1章~第12章)
第十二章 脚本化java
没看