译文地址 bonsaiden.github.io/JavaScript-Garden/zh/#intro.authors

之前被人问到JS一些概念性的东西,感觉很模糊,可能层次比较浅,偏理论的东西实践得较少,发现一处花园, 采点小蜜。


1 数字不是对象的误解
    2.toString();报语法错误的原因是因为试图将 点号解析为浮点数的一部分。
    (2).toString()可行的。

2 hasOwnProrotype方法继承自Object.prototype
    是JS中唯一一个处理属性但是不查找原型链的函数。

3 函数名在函数内总是可见的
    var a = function b (){b();}//见9

4 'use strict'
    严格模式下,arguments的 getter 和 setter 方法不会被创建
    function f(a) {
        "use strict";
        a = 42;//setter没有被创建, arguments[0] 不会变
        return [a, arguments[0]];
    }

5 ??? 然而,的确有一种情况会显著的影响现代 JavaScript 引擎的性能。这就是使用 arguments.callee。

function foo() {
    arguments.callee; // do something with this function object
    arguments.callee.caller; // and the calling function object
}

function bigLoop() {
    for(var i = 0; i < 100000; i++) {
        foo(); // Would normally be inlined...
    }
}

上面代码中,foo 不再是一个单纯的内联函数 inlining(译者注:这里指的是解析器可以做内联处理), 因为它需要知道它自己和它的调用者。 这不仅抵消了内联函数带来的性

能提升,而且破坏了封装,因此现在函数可能要依赖于特定的上下文。
因此强烈建议大家不要使用 arguments.callee 和它的属性。

6 构造函数
    构造函数内部this指向新创建的对象;
    新创建的对象prototype被指向构造函数的的prototype;
    如果 函数内部没有显示的return表达式,就会隐式的返回新建的对象;
    如果return 的不是对象,那么将返回新建的对象;
    
7 JS函数中只有通过两种方式声明局部变量 参数 和 var

8 变量提升(hoist)
    变量声明会被提升,但是缺省值是undefined
    函数式声明也会被提升,而且可以立即使用

9 JS函数内部变量查找顺序
    1 查找var声明
    2 查找是否存在以该名称命名的函数
    3 查找函数自身
    function sss(){
        var sss = 1;
        function sss(){}
    }

10 遍历数组的时候, 使用in 会遍历出原型链上的属性
    在使用for(var i=0; L=arr.length; i<L; i++) 缓存数组长度会提高效率

11 相等和比较
    JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。
    不像普通的等于操作符,严格等于操作符不会进行强制类型转换。
    虽然 == 和 === 操作符都是等于操作符,但是当其中有一个操作数为对象时,行为就不同了。这里等于操作符比较的不是值是否相等,只有对象的同一个实例才被认为是

相等的。 这有点像 Python 中的 is 和 C 中的指针比较。

12 typeof/instanceof 操作符
    typeof操作符 是JS设计的缺陷之一,大多数情况会返回Object。而且总是返回字符串。
    要想精确地得到变量类型,Object.prototype.toString.call('test').slice(8,-1)
    
    instanceof是用来检测对象的构造函数(会有多个)

13 eval
    eval()会执行一段JS字符串,只有被直接调用的时候,才会在当前作用域中执行。
    var a = eval; a('xxx'); 和 eval('xxx')执行环境会有所不同。
    setTimeout/setInterval也接受字符串作为第一个参数,并且执行。但是总是在全局作用域中执行,其中的'eval'不是被直接调用。

14 undefined
    ???全局环境中有个变量叫做undefined, 保存的是undefined类型实际值的副本,因此对它赋新值不会改变undefined类型的值。

15 JS是有分号的语言,需要分号解析源代码,因此在解析的时候会自动插入分号,会产生隐患。

16
function Foo() {
    this.value = 42;
    this.method = function() {
        console.log(this,3333); //执行函数的时候this指向了window,延迟
    };
    setTimeout(this.method, 500);//this执行新建的Foo对象,决定使用哪个方法,立即决定。
}
new Foo();

JavaScript秘密花园的更多相关文章

  1. JavaScript 秘密花园——对象的使用和属性操作

    JavaScript 中所有变量都是对象,除了两个例外 null 和 undefined. false.toString(); // 'false' [1, 2, 3].toString(); // ...

  2. 160426、JavaScript 秘密花园

    简介 关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel(写作) 和 张易江 Zhang Yi Jiang(设计). 贡献者 贡献者 中文翻译 ...

  3. JavaScript 秘密花园 学习心得

    目的 记录一下学习心得,便于以后复习,内容是比较基础的...但是很多内容我还是不知道... 对象 对象使用和属性 1.JavaScript 中所有变量都可以当作对象使用,除了两个例外 null和dun ...

  4. [笔记]JavaScript 秘密花园

    1.hasOwnProperty相关 为了判断一个对象是否包含自定义属性而不是原型链上的属性,我们需要使用继承自 Object.prototype 的 hasOwnProperty方法.hasOwnP ...

  5. 《JavaScript 秘密花园》

    恰巧今天是传统民间重要的节日之一--七夕节: 被大家挂在嘴上最多的一句话便是:有对象了吗?这不-- 这样的话,那咱就先给new出一个对象吧: var boyfriend = new Object(); ...

  6. note《JavaScript 秘密花园》

    点我跳转 (一)JavaScript-Garden-Object (二)JavaScript-Garden-Function (三)JavaScript-Garden-Array (四)JavaScr ...

  7. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  8. JavaScript –类型之我晕

    每次写博我觉得取上恬当的题目比整篇行文都难,词量有限的情况下突然想到JavaScript拾遗应该会是一个非常文艺而夺目的博文题目,但我并没有急着使用,经验告诉我应该先去搜一下看有没有被用过.果不其然, ...

  9. JavaScript ——闭包理解

    昨天晚上听别人谈起闭包这个东西,虽然对js有一点了解但却丝毫没有印象,今天也没什么事就顺便研究了一下满足好奇宝宝.整合于网上的理解,记录一下. 一.闭包的作用域 要理解闭包,首先必须理解Javascr ...

随机推荐

  1. DP入门(3)——多阶段决策问题

    多阶段决策问题,简单地说,每做一次决策就可以得到解的一部分,当所有决策做完之后,完整的解就“浮出水面”了.在回溯法中,每次决策对应于给一个结点产生新的子树,而解的生成过程对应一棵解答树,结点的层数就是 ...

  2. python 调用RESTFul接口

    本周需要将爬虫爬下来的数据入库,因为之前已经写好PHP的接口的,可以直接通过python调用PHP接口来实现,所以把方法总结一下. //python编码问题,因为好久用,所以很容易出现 # -*- c ...

  3. 最快的Hash表算法

    我们由一个简单的问题逐步入手:有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做?有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为 ...

  4. Ext.Net学习网站

    1.http://ext.net/ 官网.里面的examples是宝贝. 2.http://www.qeefee.com/zt-extnet 起飞网

  5. 关于aspnet_regsql使用方法

    aspnet_regsql命令解释 说明该向导主要用于配置SQL Server数据库,如membership,profiles等信息,如果要配置SqlCacheDependency,则需要以命令行的方 ...

  6. 弹框中的elment-form在弹框重新打开后,怎么初始化验证信息

    如果弹框关闭前有错误提示,弹框重新打开,由于没重新刷新页面,该错误还是存在.... 解决办法:弹框中的内容写成一个组件,prop接收父元素弹框的状态,并监听且reset表格 1. cnpm insta ...

  7. Jpeg-Baseline和Progressive JPEG的区别

    原文来自 http://www.hdj.me/use-progressive-jpeg-in-web 看着不错,于是粘贴了过来 今天才认识到原来JPEG文件有两种保存方式他们分别是Baseline J ...

  8. 【bzoj4009】[HNOI2015]接水果 DFS序+树上倍增+整体二分+树状数组

    题目描述 给出一棵n个点的树,给定m条路径,每条路径有一个权值.q次询问求一个路径包含的所有给定路径中权值第k小的. 输入 第一行三个数 n和P 和Q,表示树的大小和盘子的个数和水果的个数. 接下来n ...

  9. 如何优化JQuery each()函数的性能

    如果对jQuery这东西只停留在用的层面,而不知其具体实现的话,真的很容易用出问题来.这也是为什么近期我一直不怎么推崇用jQuery,这框架的API设定就有误导人们走上歧途之嫌. 01 $.fn.be ...

  10. 洛谷P1546 最短网络 Agri-Net

    P1546 最短网络 Agri-Net 526通过 959提交 题目提供者JOHNKRAM 标签图论贪心USACO 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 50分C++代码,求解 请指 ...