一、语言基础

        1.javascript中,只有null和undefined是无法拥有方法的值,它们都没有包装对象。typeof null == ‘object' , typeof undefined =='undefined'
        2.在javascript运算中,上溢返回infinity,下溢返回0,也就是说被0整除并不报错,而是返回无穷大。而0/0返回NaN。
        3.NaN的特殊性,它和任何值都不相等,也就是说,没法通过x==NaN来判断x是否是NaN,只能通过x!=x来判断,函数isNaN()的作用相同。
        4.任意Javascript的值都可以转换为布尔值。
        5.原始值是不可变的,它们的比较是值的比较,只有它们的值相等时才相等。对象时可变的,对象的比较并非值的比较,而是引用的比较,只有当它们引用同一个对象的时候,才相等。
        6.if语句将undefined转换为false,但==从不试图将操作数转换成布尔值。
        7.从数字到字符串的准换有三种方法,tofixed()指定小数位数,toExponential()指定指数计数法中小数点后的位数,toPrecision()指定有效数字位数。
        8.对象转换为字符串,首先使用toString()方法,如果不存在或者不返回原始值,则调用valueOf()方法;对象转换为数字,首先尝试使用valueof()方法,没有才使用toString()。
        9.变量声明提前中吗,只有执行到var语句时,局部变量才会真正被赋值。
        10.通过var声明的全局变量与隐式声明的全局变量区别为,通过var声明的变量不可删除,而隐式声明的变量可以删除。
        11.函数声明语句与函数定义表达式的区别为:使用var,只有变量名提前,但是变量的初始化部分还在原来的位置,而使用函数生命的话,函数名称和函数体均提前。
        12.在switch case中每个case的匹配操作实际是===而不是==。
        13.在for..in循环中,并不会遍历对象的所有属性,而是只有可枚举属性,可枚举属包括了自定义属性和方法,以及继承的自定义属性。不可枚举属性是指语言核心所定义的内置方法和属性。
        14.return可以单独使用,这样的话是返回undefined。
        15.debugger语句,用来产生一个断点,但是它不会自动启动调试器,只有调试器已经运行,才会产生一个断点。
 
二、use strict
        use strict是一条指令而不是一个语句。
        严格模式的限制:
        1.禁止使用with。
        2.所有变量都必须先声明,如果未声明,将抛出异常。
        3.在严格模式中,调用函数中的this值为undefined,在非严格模式中,this为全局对象。可以使用这种方式判定javascript是否支持严格模式:
        var hasStrictMode = (function(){"use  strict " return this === undefined}())
        4.在 严格模式中,给只读属性或者不可扩展对象创建新成员都将抛出异常,而在非严格模式中,只会失败,不会报错。
 
三、对象
        1.创建对象
        有两种方式,对象直接量和构造函数、。
        对象直接量:
var obj ={
name : "jim",
age : 12
}
        构造函数创建:
        var o =new Object()
        
        2.每一个对象都从原型中继承属性,没有原型的对象不多,Object.prototype就是其中之一。
        3.Object.create()是ECMAscript5中定义的方法,它创建一个新的对象,第一个参数是对象哦原型,第二个参数为可选,用于对对象的属性进行进一步描述。
        var obj = Object.create({x:1,y:2});
        可以通过传入参数null来创建一个没有原型的新对象,单通过这个方式创建的对象不会继承热你和东西,甚至不包括基础方法。
        如果想创建一个普通哦空对象,比如通过{}或new Object()创建的对象,需传入Object.prototype。
        在ECMAscript3中,可以使用如下方法来模拟Object.create()
 function inherit(p){
if(Object.create){
return Object.create(p);
}
var t=typeof p;
if( t !== 'object' && t!== 'function'){
throw TypeError();
}
function f();
f.prototype=p;
return new f();
}
        4.属性的查询和设置
        在javascript中,只有查询属性的时候,才会体会到继承的存在,而设置属性则和继承无关。
        如果访问不存在的属性,则返回undefined,但如果对象不存在,就会报错。
        所以要判读属性的存在,需要使用如下方式:
     var len = undefined;
if(book){
if(book.title){
len=book.title.length;
}
}
        或者
        var len = book && book.title&& book.title.length;
        5.delete 只能删除自有属性,不能删除继承属性。
        6.使用hasOwnProperty()来检查给定的名字是否是对象的自有属性。
        7.在ECMAscript5中,属性值可以用setter和getter代替,,由setter和getter定义的属性称为存取器属性(accessor property )。它不同于数据属性(data property)。
        和数据属性不同,存取器属性不具有可写性,如果属性同时具有setter和getter方法,那么它是一个可读写属性,如果它只有setter方法,它就是一个只写属性,读取的话返回undefined,如果只有getter,则为只读属性。
        定义存取器属性的方法:
     var o = {
data:value,
get accessor_prop(),
set accessor_porp(),
   }
        存取器属性也可以继承。
        8.属性的特性,数据属性的特性分别为value、writable、enumerable、configurable。而存取器属性的特性为get、set、enumerable、configurable。
        通过调用Object.getOwnPropertyDescriptor(obj,prop)可以获取某个对象特定属性的属性描述符。
        如果要设置属性特性,可以使用Object.defineProperty(obj,prop,property);
        如果要同时修改多个属性,则需要使用Object.defineProperties(obj,map);
        9.在ECMAscript5中,可以使用Object.getPrototypeOf(来查询它的原型。但在ECMAscript3中,则没有与之等价的函数,这时,需要使用o.contructor.prototype来检测一个对象的原型。
        要想检查一个对象是否是另外一个对象的原型,请使用isPrototypeOf()方法。
        10.对象的类属性是一个字符串,用以表示对象的类型信息,要想获取对象的类,可以使用toString方法,但是很多对象继承的toString()方法都进行了重写,为了能调用正确的toString版本,需要间接调用Function.call()方法。
        function classof(o) {
 if (o === null) {
  return "NULL";
 }
 if (o === undefined) {
  return "undefined";
 }
 return Object.prototype.toString.call(o).slice(8,-1);
}
对于自定义的类,没办法通过类属性来区分对象的类。

12.序列化对象,SCMAscript5中提供了JSON.stringify和JSON.parse()方法来序列化和还原对象。函数、RegExp、Error对象和undefined值不能序列化和和还原。JSON.stringify只能序列化对象可枚举的自有属性,对于一个不能序列化的属性,序列化后输出的字符串中会将这个属性省略掉。

       
四、数组
        1.如果省略数组直接量中的某个值,省略的元素将被赋值为undefined,数组直接量允许有可选哦结尾逗号,故[,,]只有连个元素,而非三个。
        2.稀疏数组中,length属性大于元素的个数。如果从数组中删除一个元素,它会变成稀疏数组。
        3.ECMAscript5中的数组方法包括forEach()、filter()、map()、every()、some()、reduce()、reduceRight()、indexOf()、lastindexOf()。
        4.检查数组类型,ECMAscript5中,有Array.isArray()方法。而ECMAscript3中,使用如下方法。
        var isArray = Function.isArray() || function(o) {
                return typeof o ==="object" &&
                Object.prototype.toString.call(o) === "[object Array]";
        };
 
 
五、函数
 
        1.函数声明语句并非真正的语句,SCMAscript规范只允许它们作为顶级语句,它们可以出现在全局代码中,或者内嵌在其他函数中,但是不能出现在循环、条件判断、或者try、catch、finally以及with语句中,注意,此限制仅限于以语句声明形式定义的函数,函数定义表达式可以出现在javascript代码的任何地方。
        2.通过this来判断当前是否为严格模式:
        var strict = (function () { return !this;}());
        3.this是一个关键字、表示变量,也不是属性名,javascript语法不允许给this赋值。this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果嵌套函数作为方法调用,this指向调用它的对象,如果嵌套函数作为函数调用,this指向全局对象或者undefined(严格模式)。如果你想访问这个外部函数的this值,需要将this的值保存到一个变量中,这个变量和内部函数都在同一个作用域内。arguments与this类似。
        4.如果构造函数没有形参,javascript构造函数调用是允许省略实参列表和圆括号的。
        5.构造函数通常不使用return关键字,构造函数表达式的计算结果就是这个新的对象的值,如果构造函数显示返回一个对象,那么调用构造函数的结构就是这个返回的对象,如果使用了return但是没有返回值,或者返回一个原始值,那么将忽略原始值,同时使用这个新的对象作为调用结果。
        6.实参对象的属性callee指向当前正在执行的函数,在ECMAscript中禁止使用。
        7.自定义函数属性,当函数需要一个静态变量来保持某个值不变的时候,最方便的方式给涵涵素定义属性,而不是定义全局变量,缺点是,这个属性可能被人修改。
        8.关联到闭包的作用域都是活动的。
        9.在函数中,实参个数通过arguments.length获取,而形参个数通过函数的length属性获取。
        10.call()和apply()的区别,call()第一个参数之后的所有参数是要传入的实参,而apply将所有要传入的实参都放在一个数组当中。
        11.ECMAscript5中有一个bind方法,可以将某个函数绑定到某个对象,ECMAscript中可以轻松实现这个方法。
        function bind(f,o) {
 if(f.bind) {
  return f.bind(o);
 }
 else {
  return f.apply(o, arguments);
 }
}

12.ECMAscript5中,bind不仅仅是将函数绑定到一个对象,还可以实现curry柯里化,除了第一个实参外,其传入bind的实参也会绑定到this。

        13.Function()构造函数,所创建的函数并不是使用词法作用域,相反,函数体代码的编译总是顶层函数执行。例如

       var scope = “global"
function constructFunction() {
var scope = "local";
return new Function("return scope"); //无法补货局部作用域
}
constructFunction(); //=>global
        14.所有函数都是可以调用的,但是不是所有可调用对象都是函数。
        
        
        
        
        
        

《JavaScript权威指南》拾遗(上)的更多相关文章

  1. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  2. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  3. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  4. 《javascript权威指南》读书笔记——第一篇

    <javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...

  5. Javascript权威指南

    一.数字写法 3.14 2345.789 .333333333333333333 6.02e23 // 6.02 × 10 23 1.4738223E-32 // 1.4738223 × 10 −32 ...

  6. javascript权威指南(中文版)中的一些错误(一)

    本人目前正在学习js,使用的是javascript权威指南(中文版),学习的时候发现一些细节上的错误,若是我的错误,欢迎指正 1.P11------多了“我们称为 原文为 return Math.sq ...

  7. JavaScript权威指南学习笔记6

    这两天主要翻看了书中的第18-22章,重点看了第17章:事件化处理,其它几章节主要是翻了下书知道有相关的概念,没有真正理解其中的内容,或者没有考虑究竟如何能把里面的内容应用到实际的项目中.说的讽刺一点 ...

  8. 《JavaScript权威指南》学习——js闭包

    序:闭包这个玩意啊~在很多没有代码块的语言中都会出现,已经成为大多程序员入门的一道坎,闭包让很多程序员觉得晦涩(事实上百度一下这个名词,真的说的很晦涩啊亲==|||),我第一次知道闭包这个名词是从&l ...

  9. 《JavaScript权威指南》读书笔记——JavaScript核心

    前言 这本由David Flanagan著作,并由淘宝前端团队译的<JavaScript权威指南>,也就是我们俗称的“犀牛书”,算是JS界公认的“圣经”了.本书较厚(有1004页),读起来 ...

  10. 【笔记】javascript权威指南-第六章-对象

    对象 //本书是指:javascript权威指南    //以下内容摘记时间为:2013.7.28 对象的定义: 1.对象是一种复合值:将很多值(原始值或者对象)聚合在一起,可以通过名字访问这些值. ...

随机推荐

  1. 一步一步学android之控件篇——ScrollView

    一个手机的屏幕大小是有限的,那么我要显示的东西显示不下怎么办?这就会使用到ScrollView来进行滚动显示,他的定义如下: 可以看到ScrollView是继承于FrameLayout的,所以Scro ...

  2. STC15?MSP430?ARM?DSP?

    自从大学毕业以来,发现属于自己的时间越来越少,每天忙于工作,导致在大学学到的东西都好生疏,特别是大一刚开始学的模电,单片机等,现在才慢慢的抓起来,然后在这个多核处理器流行的时代,单片机貌似快过时了,但 ...

  3. 命令行方式运行yii2程序

    测试环境,yii 2.0.3版本 web访问方式,控制器放在controllers目录下 ,浏览器访问如下地址 http://127.0.0.1/index.php?r=[controller-nam ...

  4. MyEclipse中jsp的凝视报错解决

    jsp页面中凝视报错: 出错现场:在eclipse中没有报错.在MyEclipse中报错. <!-- To use express install, set to playerProductIn ...

  5. zoj 3710 Friends

    #include<stdio.h> #include<string.h> ][],h; int main(int argc, char* argv[]) { int t,i,n ...

  6. MSSQL数据库统计所有表的记录数

    今天需要筛选出来库中行数不为零的表,于是动手写下了如下存储过程. CREATE PROCEDURE TableCount AS BEGIN SET NOCOUNT ON ),RowsCount INT ...

  7. VS2012 内容存储区指定的位置无效或者您无权访错误

    ——解决由于移动过microsoft help viwer( msdn )数据目录,又误删除数据目录后,引发其不能启动问题 1.使用命令行下载microsoft help viwer( msdn )数 ...

  8. IS-A 和 HAS-A

    IS-A关系 IS-A就是说:一个对象是另一个对象的一个分类. 下面是使用关键字extends实现继承. public class Animal{ } public class Mammal exte ...

  9. Hibernate 总结一

    Session 当批量处理数据过大时,session这个集合会造成内存溢出,需要通过flush把session中的数据刷出到数据库中,让后再clear,清空缓存 一.集合映射. 类型 Java中声明 ...

  10. [Swust OJ 402]--皇宫看守(树形dp)

    题目链接:http://acm.swust.edu.cn/problem/402/ Time limit(ms): 5000 Memory limit(kb): 65535   Description ...