一、语言基础

        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. [poj 3159]Candies[差分约束详解][朴素的考虑法]

    题意 编号为 1..N 的人, 每人有一个数; 需要满足 dj - di <= c 求1号的数与N号的数的最大差值.(略坑: 1 一定要比 N 大的...difference...不是" ...

  2. cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针

    实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针. 样例: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不须要返回什么,得到一个新链表:a- ...

  3. OpenVPN多处理之-多队列TUN多线程

    1.有一点不正确劲 在改动了那个TUN驱动后,我在想,为何我总是对一些驱动程序进行修修补补而从来不从应用程序找解决方式呢?我改动了那个TUN驱动,可是能保证我的改动对别的应用一样可用吗?难道TUN驱动 ...

  4. C#复习一( Twenty Days)

      今天开始将要复习最近所学的一些C#知识.下面就来总结一下今天所复习的内容,以此来巩固我对C#知识的掌握.今天主要以举几个程序为例. 首先还是要注意代码的规范: –注释//,/**/,/// –骆驼 ...

  5. 我的iOS学习之路(四):动画设置

    在ios的开发过程中,经常需要对视图控件进行变化,如大小,颜色,旋转等,这是如果直接将变化结果呈现出来,就显得不够友好,所以我们通常会使用动画,让用户能够看到变化的过程. 使用动画通常有两种方式,一种 ...

  6. 浅谈Struts2(二)

    一.struts2的跳转 1.action跳转JSP a.默认为forward <action name="action1" class="com.liquidxu ...

  7. Last Defence (run time error)

    Last Defence时间限制:1000 ms | 内存限制:65535 KB描述Given two integers A and B. Sequence S is defined as follo ...

  8. UVa 10806 Dijkstra,Dijkstra(最小费用最大流)

    裸的费用流.往返就相当于从起点走两条路到终点. 按题意建图,将距离设为费用,流量设为1.然后增加2个点,一个连向节点1,流量=2,费用=0;结点n连一条同样的弧,然后求解最小费用最大流.当且仅当最大流 ...

  9. linux下静态链接库的用法

    最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于unde ...

  10. c语言(3)--运算符&表达式&语句

    计算机的本职工作是进行一系列的运算,C语言为不同的运算提供了不同的运算符! 1.那些运算符们 .基本运算符 算术运算符:+ - * /  % ++ -- 赋值运算符:= 逗号运算符:, 关系运算符:& ...