《JavaScript语言精粹》笔记

Function.prototype.method=function(name,func){
    this.prototype[name]=func;
    return this;
}
//1.注释最好使用双斜杠而不是带*斜杠
/*2.数字,js不区分整数类型,1和1.0是相等的
 * NaN是一个数值,它表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它自己,可用isNaN(number)检查
 * 值Infinity表示所有大于1.79769313486231570e+308的值
 */
/*3.js没有字符类型,可用一个字母的字符串表示字符,字符串有length属性,字符串不可变
  两个包含相同着完全相同的字符且字符顺序也相同的字符串被认为相同的字符串*/
/*4.js中以下值为假:false,null,undefined,空字符串,数字0,数字NaN*/
/*第三章:对象
    存取属性:stooge["first-name"]与stooge.first-name一样,不存在的属性返回undefined
    ||用于填充默认值:var name=stooge.first-name||"unknown";
    每个对象都连接到一个原型对象,并且它可以从中继承属性,原型只在检索时有用,如为一个对象添加一个不存在的属性时,
该对象会临时将属性添加到对象中,但如果检索一个不存在的属性,便会到原型对象中查找该属性,即委托
hasOwnProperty()可以限制只在自己中查找对象
    delete stooge.first-name删除某个属性,但不触及原型中的对象
    尽量避免全局变量
*/
/*第四章:函数对象
 * 函数会产生一个原型Function.property,而Function包含一个原型Object.property
 * 函数也是对象,唯一特殊在于可以调用执行
 * 函数调用时会默认配置一个this和argments,其中argments是一个类似数字的对象,但不具备数组的一切方法
 * 函数执行完成总会return一个东西(undefined或者对象),如果是对象调用函数,则返回this(调用函数的对象)
 * 函数抛出的异常对象包括一个name和message
 * */
//递归48页
var hanoi=function(disc,src,aux,dst){//desc-碟子个数,
    if(desc>0){
        hanoi(disc-1,src,dst,aux);
        hanio(disc-1,aux,src,dst);
    }
}
var walk_the_DOM=function walk(node,func){
    func(node);
    node=node.firstChild;
    while(node){
        walk(node,func);
        node=node.nextSibiling
    }
}
var getELementByAttrbute=function(attr,value){//实现根据属性值查找节点
    var results=[];
    walk_the_DOM(document.body,function(node){
        var actual=node.nodeType ===1 && node.getAttrbute(attr);
        if(typeof actual===‘string‘ &&
                (actual===value || typeof value !==‘string‘))
            results.push(node);
    });
    return results;
}
/*如果一个函数返回自身递归调用的结果,那么调用的过程会被替换为一个循环,它可以显著提高速度,即尾递归优化,js并不支持*/
var factorial=function factorial(i,a){
    a=a||1;
    if(i<2){
        return a;
    }
    return factorial(i-1,a*i);
}
/*    函数作用域,js只支持函数内的变量外部不可见,代码块级的变量在函数中处处可见,这与其他语言(c)不一样
 * 因此,最好把函数用到的变量全部放在函数顶部,而不是像其他语言一样延迟定义
 *    闭包:作用域的好处是内部函数可以访问定义它们的外部函数的变量和参数(除了this和argments),有时候一个内部函数
 *拥有比它的外部函数更长的生命周期*/
var myObject=function(){
    var value=0;
    
    return {
        increament:function(inc){
            value += typeof inc ===‘number‘?inc:1;
        },
        getValue:function(){
            return value;
        }
    }
}();//注意这里的()
var quo=function(status){
    return {
        get_status:function(){
            return status;
        }
    };
};
var myQuo=quo("amazed");//新建一个对象后,quo调用已经结束返回,但是get_status依然可以访问quo中的sttaus,闭包
document.writeln(myQuo.get_status());
var fade=function(node){//渐变实现,闭包的演示
    var level=1;
    var step=function(){
        var hex=level.toString(16);
        node.style.backgroundColor=‘#FFFF‘+hex+hex;
        if(level<15){
            level+=1;
            setTimeout(step,100);
        }
    };
    setTimeout(step,100);
};
var add_the_handlers=function(nodes){//这是一个错误的方法(54页)
    var i;
    for(i=0;i<nodes.length;i++){
        nodes[i].onclick=function(e){
            alert(i);
        }
    }
}
var add_the_handlers=function(nodes){//上面方法的正确写法(54页)
    var i;
    for(i=0;i<nodes.length;i++){
        nodes[i].onclick=function(i){
            return function(e){alert(i);}
        }(i);
    }
}
//模块,可以通过函数和闭包实现模块
String.method("deentityify",function(){//TODO 模块,重要
    //字符实体表,它映射字符实体的名字到对应的字符
    var entity={quot:‘"‘,lt:‘<‘,gt:‘>‘};
    //返回deentityify方法。方法逻辑在此处
    return function(){
        //这才是deentityify的方法。它调用字符串的replace方法。
        return this.replace(/&([^&;]+);/g,function(a,b){
            var r=entity[b];
            return typeof r=== ‘string‘?r:a;
        });
    };
}());//此处()执行立刻调用刚刚构造的函数,这个调用之后返回的才是deentityify方法
document.writeln(‘&lt;&quot;&gt;‘.deentityify());
/*模块的一般形式是:1.一个定义了私有变量和函数的函数;
                 2.利用闭包创建可以访问私有变量和函数的特权函数
                 3.最后返回这个特权函数,或者把它们保存到一个可以访问到的地方*/
var serial_maker=function(){//练习
    var prefix=‘‘;
    var seq=0;
    return {
        set_prefix:function(p){prefix=String(p);},
        set_seq:function(s){seq=s;},
        gensym:function(){
            var result=prefix+seq;
            seq++;
            return result;
        }};
}
var seqer=serial_maker();
document.writeln(seqer.gensym());
seqer.set_prefix(‘Q‘);
seqer.set_seq(1000);
document.writeln(seqer.gensym());
//套用57页
//记忆:以下是
var fibonacci=function(n){
    return n<2?n:fibonacci(n-1)+fibonacci(n-2);
};
for(var i=0;i<10;i++){fibonacci(i);}//会执行453次

var fibonacci=function(){
    var memo=[0,1];//记忆数组
    var fib=function(n){
        var result=memo[n];
        if(typeof result !==‘number‘){
            result= fib(n-1)+fib(n-2);
            memo[n]=result;
        }
        return result;
    };
    return fib;
}();//使用该方法会记住之前算出的结果,执行次数会减少到11次
//第五章:继承,60页
//基于原型的继承
var myMammal={
        name:‘Herb the Mammal‘,
        get_name:function(){
            return this.name;
        },
        says:function(){
            return this.saying || ‘‘;
        }
};
var myCat=Object.beget(myMammal);//对象继承
myCat.name=‘Henrietta‘;//重设属性
myCat.saying=‘meow‘;
myCat.purr=function(n){//扩展新方法
    var i,s=‘‘;
    for(i=0;i<n;i++){
        if(s)
            s+=‘_‘;
        s+=‘r‘;
    }
    return s;
};
myCat.get_name=function(){//覆盖父类方法
    return this.says+‘‘+this.name+‘‘+this.says;
};
//5.4函数化 66页未理解
//第六章:数组,72页
//js中数组以对象方式实现,typeof返回Object ,第一个元素为[0]...,数组没有固定大小,具备动态扩展
//push()增加最新的元素,splice(index,amount)删除元素
//第七章:正则表达式,79页
//js中正则表达式必须写在一行,js的语言处理程序之间的兼容性非常高,除了正则表达式的移植性不好
//处理的方法有:regexp.exec、regexp.test、string.match、string.replace、string.search、string.split
var parse_url=/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url="http://www.ora.com:80/goodparts?q#fragment";
var result=parse_url.exec(url);
//第八章:方法,92页
//1.Array:array.contact()、array.join()、array.pop()、array.push()、array.reverse()、array.shift()
//array.slice()[浅复制]、array.sort()[小心]、array.splice()[删除]
//第九章:代码风格,108页

//第十章:优美的特性,112页,js的一些特性是很不稳定的,必须谨慎
//附录A,116页
//A.1全局变量:尽量避免全部变量污染,例如var
//A.2块级作用域:大多数类c的语言都支持变量的块级作用域,因此建议变量在第一次使用时声明,
//    但js不支持这一特性,因此建议在函数开头声明变量
//A.3自动插入分号:js解析时可以在忘记分号的地方自动插入分号,但有些分号不一定就是开发者相要的!
//A.4保留字、A.5 Unicode、A.6 typeof、A.7 parseInt()、A.8 +、A.9浮点数
//A10 NaN用isNaN()检测而不是===NaN
//B.1 ===和!==  ==和!=,建议使用===    
//B.4 Continue,不用continue性能会好点
//附录E:JSON,150页

时间: 2024-12-17 05:29:19

《JavaScript语言精粹》笔记的相关文章

SQL 笔记 By 华仔

-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据库的大小的方法 笔记3-徐 设置数据库自动增长注意要点 笔记4-徐 模仿灾难发生时还原adventurework数据库 示例 stopat 笔记5-徐 检查日志文件不能被截断的原因 笔记6-徐 检测孤立用户并恢复孤立用户到新的服务器 解决数据库镜像孤立用户问题 笔记7-徐 SQLSERVER日志记录

SQL笔记---多表左联

这是实际场景当中的一个例子,拿出来分析总结思路. -- SQL 查询 --SELECT  orderQuery.Rk_SkuCode ,        orderQuery.SkuName,        SUM(ISNULL(orderQuery.OrderTotal, 0))        - SUM(ISNULL(removeQuery.RemoveTotal, 0))        - SUM(ISNULL(pickQuery.PickTotal, 0))        - SUM(IS

SQL笔记---分页

随用随想,随用随记. 通过实际应用掌握SQL语句. 一. SQL分页 1. 第一种方法:利用ID大于多少进行筛选 SELECT TOP 20        *FROM    dbo.WMS_StockWHERE   ( Rk_SkuCode > ( SELECT MAX(Rk_SkuCode)                         FROM   ( SELECT TOP 40                                            *           

《HeadFirst SQL》笔记

规范化 0 约束 1 原子性 2 第一范式 1NF 3 数据模式 4 依赖 5 联接查询 6 交叉联接(AKA 笛卡尔联接,叉积) 7 内联接 8 子查询 9 外联接 10 自联接 11 集合 12 事务 13 ACID 14 管理事务 15 常用语句 16 注意 17 规范化 约束 NOT NULL UNIQUE PRIMARY KEY DEFAULT FOREIGN KEY:引用父表的某个唯一值引用完整性:插入外键列的值必须已经存在于父表的来源列中 --创建外键 create table i

SQL笔记1:SELECT及SELECT高级应用

T-SQL笔记1:SELECT及SELECT高级应用 本章摘要 1:安装AdventureWorks 2:基本运算符和表达式 3:between 4:like 5:escape 6:TOP 7:GROUP BY 7.1:GROUP BY ALL 7.2:HAVING 8:SELECT字句技术 8.1:使用DISTINCT消除重复值 8.2:返回拼接的结果 8.3使用INTO字句 9:子查询 9.1:子查询类型 9.2:代替表达式的查询 9.3:多层嵌套 10:比较使用 EXISTS 和 IN 的

金典 SQL笔记(6)

page223-索引 --利用SQL 语句创建索引 --CREATE INDEX 索引名称on 表名(字段 ,字段, 字段字段n) --索引名称必须为唯一的,字段 ,字段, 同意一个到多个 --范例为T_person 表中给FName创建索引索引名为 idx_person_name CREATE INDEX idx_person_name ON T_Person (FName) --删除索引 --drop index 表名索引名 DROP INDEX T_person.idx_person_na

Mybatis 项目开发实际常用SQL笔记总结

parameterType 和 resultType parameterType:单个参数用String,多个参数用map resultType:   可以是 Integer.String.Object    <select id="countGroupMasterByUid" parameterType="String" resultType="Integer">      SELECT              COUNT(id)

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o

sql笔记

1. 看下面sql,重点有两个,一个是distinct  ,一个是树形结构查询 select DISTINCT t.unit_code from t_unit_relation t where t.corp_tn='jiaozhougongan' start with t.unit_code='0001' connect by prior t.unit_code = t.unit_upcode 分析: ① distinct:去重复值 ② 树形结构查询,这个博客:http://www.cnblog

HeadFirst SQL 读书摘要

数据库都是用 圆柱形表示的. 数据库中包含表 表中包含行和列 行又叫记录record,  列又叫 字段field 创建数据库 create database mypipe_l; 选择数据库 use mypipe_l; 创建表 create table doughnut( name VARCHAR(10), type VARCHAR(6) ); 查看表 desc doughnut; 删除表 drop table doughnut; 插入数据 insert into doughnut (name,