zoukankan      html  css  js  c++  java
  • 《Javascript语言精粹》 读书笔记

    1 6种值被当做假:false、null、undefined、空字符串''、数字0、数字NaN,其他所有值都为真,包括"false"

    2 typeof有6种值,分别是'number','string','boolean','undefined','function','object';其中typeof(null),结果是'object'

    3 如果第一个运算数的值为真,那么运算符||产生它的第一个运算数的值.否则,它产生第二个运算数的值.如,可利用||运算符来填充默认值var status = flight.status || "unkonwn"

    4 apply方法让我们构建一个参数数组传递给调用函数,它允许我们选择this的值。apply接受两个参数,第一个是要绑定给this的值,第二个是参数数组
    //构造一个包含两个数字的数组,并将它们相加
    var array = [3, 4];
    var sum = add.apply(null, array); //sum的值为7

    5 异常处理

    var add = function(a, b) {
        if(typeof a !== 'number' || typeof b !== 'number') {
            throw {
               name: 'TypeError',
    	   message: 'add needs numbers'
    	};
         }
         return a + b;
    }
    
    //构造一个try_it函数,以不正确的方式调用之前的add函数
    var try_it = function() {
    	try {
    		add("seven");
    	} catch (e) {
    		document.writeln(e.name + ':' + e.message);
    	}
    }                
    

    6 给Number.prototype增加一个integer方法,根据数字的正负来判断是使用Math.ceiling(向上取整)还是Math.floor(向下取整)

    Number.method('integer', function() {
    	return Math[this<0 ? 'ceil' : 'floor'](this);
    });
    document.writeln((-10/3).integer()); //-3
    

    7  移除字符串首尾空白的方法

    String.method('trim', function() {
    	return this.replace(/^s+|s+$/g, '');
    	//正则的意思是从头开始匹配空白字符一次或多次,从最好开始匹配空白字符一次或多次
    });
    
    document.writeln('"' + "  neat   ".trim() + '"');
    

      

    8 模块是一个提供接口却隐藏状态与实现的函数或对象,模块模式一般形式是:一个定义了私有变量和函数的函数;利用闭包创建可以访问私有变量和函数的特权函数;最后返回这个特权函数,或者把他们保存到一个可以访问到的地方,使用模块模式可以摒弃全局变量的使用

    String.method('deentityfity', function() {
    	//字符实体表,它映射字符实体的名字到对应的字符
    	var entity = {
    		quot: '"',
    		lt: '<',
    		gt: '>'
    	};
    
    	//返回deentityfity方法
    	return function() {
    		return this.replace(//&([^&;]+);/g, function(a, b) {
    			//如果字符串可以再映射表中找到就将其替换为映射表中的值
    			var r = entity[b];
    			return typeof r === 'string' ? r : a;
    		});
    	};
    }());
    document.writeln('<">'.deentityfity()); // <">
    

      

    9 javascript缺少块级作用域,所以,最好的做法是在函数体的顶部声明函数中可能用到的变量

    10 /^ $/i,我们用^和$来框定这个表达式,它指引这个正则表达式对文本中的所有字符进行匹配,如果省略了这个标识,那么只要一个字符串包含一个数字,这个正则表达式就进行匹配,但有了这些标识,只有当一个字符串的内容仅为一个数字的时候,它才会告诉我们,如果仅包含^, 它将匹配以一个数字开头的字符串,如果我们仅包含$, 则匹配以一个数字结尾的字符串。

    11 (?:...)?表示一个可选的非捕获型分组

    12 javascript中的糟粕

    全局变量 :越少越好
    作用域 :无块级作用域,在每个函数开头部分声明所有变量
    自动插入分号 :因此大括号风格需使用埃及括号
    Unicode :javascript字符是16位的,只能覆盖65535个字符
    parseInt :增加第二个参数,明确进制,parseInt("08",10)
    浮点数 :二进制浮点数不能正确的处理十进制小数,0.1+0.2不等于0.3,不过整数部分是精确的
    NaN : typeof NaN === 'number' //true; NaN === NaN //false;
    对象 :因为原型链的存在,javascript对象永远不会有真的空对象

  • 相关阅读:
    Eclipse 卸载插件
    ubuntu下载linuxkernel source code
    Android原生态下载错误解决方法
    linux下查看文件或者文件夹属性和大小
    linux 进行hash校验方法
    Mercury迷你150M无线路由器设置
    xubuntu 12.10 安装jdk1.6
    Linux下stardic和goldendict等词典的词库下载
    Web前端面试指导(九):盒子模型你是怎么理解的?
    Web前端面试指导(十二):::before 和:before有什么区别?
  • 原文地址:https://www.cnblogs.com/elexiang/p/4743581.html
Copyright © 2011-2022 走看看