框架的确好用, 不过他们也隐藏了JavaScript中丑陋的细节和DOM的运作机制. 如果你的目标是敢于自称"我懂JavaScript", 那么花时间学习框架无异于南辕北辙. 

下面这些JavaScript语言特性你应该熟记在心并避免被他们困扰, 然而多数人可能对此还不熟悉. 

- object.prop和object['prop']是一回事. (所以咱能不用eval么, 谢谢嗷); 对象的属性名都是以字符串来索引的, 连数组的下标都是; for...in能拿来干啥, 不能干啥. 

- 属性检测; undefined是个啥(及其肮脏之处); 不出名的in操作符有何优势, 它与typeof/undefined有何不同; hasOwnProperty方法; delete操作符的作用 

- Number类型本质上只是浮点类型; 语言无关地使用浮点类型的困难所在; 避免parseInt方法的八进制陷阱 

- 潜逃函数的变量作用域; 为避免产生全局变量而使用var关键字的必要性; 作用域与闭包的结合应用; 某个经典的闭包与循环的问题 

- 全局变量与window对象的属性其实是一回事; 全局变量与DOM对象在IE中的命名冲突问题; 以及使用var来规避此类问题. 

- function语句被提升的机理, function语句与function表达式的区别; 为什么避免使用具名函数表达式. 

- 构建函数, prototype属性, new关键字的工作机制; 在此基础上实现一个基本的类-子类-实例OO系统; 何时考虑使用基于闭包的对象来取代原型.(一般的JS教程这里讲的都很渣, 我花了好几年才真正理解) 

- this关键字在函数调用时确定而非函数定义时; 传入作为参数函数为什么不像其他语言那样正常工作; 如何用Function.prototype.bind来解决这个问题. 

- ES5引入的新语言特性, 如indexOf, forEach等; Array类的函数式编程方法; 如何为旧浏览器引入这些方法; 用匿名函数调用这些方法来提高代码可读性. 

- 浏览器与JS的控制流程交换机理; 同步与异步执行; 运行中主动触发的事件与真的事件间的区别, 以及timeout的机制; 调用同步执行的方法(比如alert)可能造成的控制流重进入的潜在异常; 

- 跨window编程中instanceof潜在的问题以及不同文档间控制流程是怎样互相影响的; postMessage会如何解决该问题. 

这里绝大多数问题都需要你批判性地看待JavaScript, 理解它由于历史原因而遗留下来的种种不完美(一般来说比别的语言都要糟糕), 并学会规避这些陷阱. Douglas Crockford在这方面的研究很值得一读(虽然我并非100%同意他的"语言精粹") 
var my = ["foo"]; //下标是0
console.assert(my[] == "foo"); //按数索引
console.assert(my[""] == "foo"); //按字符串索引 -
undefined 是一个自由变量, 跟window, document没有区别
虽然有那么一种隐藏的类型存在, 但是undefined可以赋值给任意值
var undefined = // 破坏后面不成熟的js代码
 , null = 'foo' //出错, 因为null是语言关键字 in操作符没见到过, 除了周爱民的那本书... delete相当于为变量赋值那个特殊的undefined
跟赋null值不同 -
语言无关我也没理解. 不知道是不是那个浮点数储存成二进制的问题(IEEE754还是啥来着) parseInt如果省略第二个参数那么会智能地检查字符串, 而0开头(且后面没跟[xX])的会被认为是8进制.
Thomas Fuchs推荐的方法是 console.assert(~~(* "09.2") === );
*确保获得的是数
波浪线是整数的按位取反, 取两次就等于给小数parseInt - - -
[是嵌套 - -] 那个经典问题:
var items = document.getElementsByTagName('li')
 , i = items.length;
while (i--)
 items[i].onclick = function(){console.assert( i === )} //不会抛出异常 -
IE下的window对象与全局作用域对象间关系问题[javaeye一个劲地超时]
http://hax.javaeye.com/blog/349569 -
function foo(){...} //这是function语句
function(){...} //这是function表达式 提升的作用是(如果没记错的话应该是这样...前段时间网上冒出几个js quiz很重视这个.):
[源代码]
/*一坨ooxx*/
var bar = function(){/*bar的定义*/}; //把一个函数表达式赋值给一个变量名
function foo(){/*foo的定义*/}; //具名函数的定义, 同时这是一个函数语句 [执行顺序]
var foo;
var bar;
foo = function(){/*foo的定义*/}; //具名函数定义的提升
/* ooxx */
bar = function(){/*bar的定义*/}; //没被提升. -
[闭包是性能杀手. 下划线代表私有属性===王道]
原型继承有这么一个有趣的情况
function Boy () {
 Boy.prototype = {
  fxxk: function(){/*...*/}
 };
}
那么第一个Boy实例不会fxxk
从第二个开始可以 - - - this关键字那篇写得太完善了... - 嗯就是Array.prototype的那几个方法, 最后那句的意思是把匿名函数直接传入给forEach, 仅此而已... -
这个我没啥经验...第二句作者的意思可能是指在某些元素上直接调用focus()或者submit() 与用户点击来触发这些事件的区别. timeout的机理 John Resig 写过一篇
ejohn.org/blog/how-javascript-timers-work/ -
在某个iframe里面定义的数组不是主window中Array的实例. instanceof检测会返回false
别的不知道了...
for...in当然是循环用的,for i in n,一个代表迭代的次数 一个代表迭代的对象。
可以做有预测的循环,可以检查迭代对象的类型等等。。 - 属性检测; undefined是个啥(及其肮脏之处); 不出名的in操作符有何优势, 它与typeof/undefined有何不同; hasOwnProperty方法; delete操作符的作用 undefined就是找不到的意思……我认为,就感觉你生命了一个东西,如果没有赋值或者没有表达式就undefined了……typeof是类型监察,监察原型的所属是哪个类型,hasOwnproperty方法,没用过,是监察自身对象都有什么属性的?delete,没用过……查了下是删除对象或者数组一个属性的。。。后面的参数可以是函数表达式可以是数组元素。 - Number类型本质上只是浮点类型; 语言无关地使用浮点类型的困难所在; 避免parseInt方法的八进制陷阱 前者没感觉有什么困难,可能Number操作比较少吧,parselnt就是转换成数字类型啊……8进制什么的,没用过。。 - 潜逃函数的变量作用域; 为避免产生全局变量而使用var关键字的必要性; 作用域与闭包的结合应用; 某个经典的闭包与循环的问题 嵌套函数吧~关系比较复杂,但是作用域都是自己{}之间的吧。VAR是向上查找,不可覆盖的~?作用域与闭包的应用避免全局变量,经典的闭包与循环的代码,今天刚看了一个,绑定操作的一个函数,就是循环中套嵌闭包生成独立的命名空间吧。。 - 全局变量与window对象的属性其实是一回事; 全局变量与DOM对象在IE中的命名冲突问题; 以及使用var来规避此类问题. window对象肯定和全局变量是一回事,所以要用闭包,全局变量与DOM对象IE中冲突就用var吧…… - function语句被提升的机理, function语句与function表达式的区别; 为什么避免使用具名函数表达式. 不清楚……匿名函数?表达式和语句的区别这个知道,避免覆盖重复。 - 构建函数, prototype属性, new关键字的工作机制; 在此基础上实现一个基本的类-子类-实例OO系统; 何时考虑使用基于闭包的对象来取代原型.(一般的JS教程这里讲的都很渣, 我花了好几年才真正理解) 构建函数,prototype属性,new关键字的机制,建立一个类的基本例子,所有书的开头都有……虽然不太好理解,但是总看也会的。先构造函数,然后自身prototype加属性,然后new实例化。~ - this关键字在函数调用时确定而非函数定义时; 传入作为参数函数为什么不像其他语言那样正常工作; 如何用Function.prototype.bind来解决这个问题. 因为this在JS里指向的是原型。否则就要call或着apply。 - ES5引入的新语言特性, 如indexOf, forEach等; Array类的函数式编程方法; 如何为旧浏览器引入这些方法; 用匿名函数调用这些方法来提高代码可读性. 说的是扩展原型对象?后面那句没懂。。。 - 浏览器与JS的控制流程交换机理; 同步与异步执行; 运行中主动触发的事件与真的事件间的区别, 以及timeout的机制; 调用同步执行的方法(比如alert)可能造成的控制流重进入的潜在异常; 回调函数,从上到下,单步,timeout机制懂,其他没体验过…… - 跨window编程中instanceof潜在的问题以及不同文档间控制流程是怎样互相影响的; postMessage会如何解决该问题.

框架的确好用, 不过他们也隐藏了JavaScript中丑陋的细节和DOM的运作机制. 如果你的目标是敢于自称"我懂JavaScript", 那么花时间学习框架无异于南辕北辙.

下面这些JavaScript语言特性你应该熟记在心并避免被他们困扰, 然而多数人可能对此还不熟悉.

- object.prop和object['prop']是一回事. (所以咱能不用eval么, 谢谢嗷); 对象的属性名都是以字符串来索引的, 连数组的下标都是; for...in能拿来干啥, 不能干啥.

- 属性检测; undefined是个啥(及其肮脏之处); 不出名的in操作符有何优势, 它与typeof/undefined有何不同; hasOwnProperty方法; delete操作符的作用

- Number类型本质上只是浮点类型; 语言无关地使用浮点类型的困难所在; 避免parseInt方法的八进制陷阱

- 潜逃函数的变量作用域; 为避免产生全局变量而使用var关键字的必要性; 作用域与闭包的结合应用; 某个经典的闭包与循环的问题

- 全局变量与window对象的属性其实是一回事; 全局变量与DOM对象在IE中的命名冲突问题; 以及使用var来规避此类问题.

- function语句被提升的机理, function语句与function表达式的区别; 为什么避免使用具名函数表达式.

- 构建函数, prototype属性, new关键字的工作机制; 在此基础上实现一个基本的类-子类-实例OO系统; 何时考虑使用基于闭包的对象来取代原型.(一般的JS教程这里讲的都很渣, 我花了好几年才真正理解)

- this关键字在函数调用时确定而非函数定义时; 传入作为参数函数为什么不像其他语言那样正常工作; 如何用Function.prototype.bind来解决这个问题.

- ES5引入的新语言特性, 如indexOf, forEach等; Array类的函数式编程方法; 如何为旧浏览器引入这些方法; 用匿名函数调用这些方法来提高代码可读性.

- 浏览器与JS的控制流程交换机理; 同步与异步执行; 运行中主动触发的事件与真的事件间的区别, 以及timeout的机制; 调用同步执行的方法(比如alert)可能造成的控制流重进入的潜在异常;

- 跨window编程中instanceof潜在的问题以及不同文档间控制流程是怎样互相影响的; postMessage会如何解决该问题.

这里绝大多数问题都需要你批判性地看待JavaScript, 理解它由于历史原因而遗留下来的种种不完美(一般来说比别的语言都要糟糕), 并学会规避这些陷阱. Douglas Crockford在这方面的研究很值得一读(虽然我并非100%同意他的"语言精粹")

js压箱底的宝贝的更多相关文章

  1. 8款压箱底的Mac屏幕截图和录音录像工具软件,请你务必低调使用

    以下几款是是Mac上优秀的屏幕截图.录像和录音工具,有了这些工具,在Mac上进行截屏.录制视频或者录音都会事半功倍. 1. Snagit Mac上最好用最强大的屏幕截图工具,支持各种方式的屏幕截图以及 ...

  2. 量化分析获取数据的3种姿势(压箱底的神器Tushare)

    自打入门量化分析起,就有相当部分的时间在与数据打交道,从数据的获取.清洗到使用,对分析而言既是繁琐的,也是必须的.有大牛曾经说,量化分析有8成的开发时间都在处理数据. 为了节省时间,将更多精力投入到策 ...

  3. 震惊,某博主为吸引眼球拿出压箱底SQL总结,如果你没看那就吃亏了!(超级详细的SQL基础,你还不会的话就别学数据库了)

    这里还有数据库相关的优质文章:快戳我,快戳我

  4. 旷视6号员工范浩强:高二开始实习,“兼职”读姚班,25岁在CVPR斩获第四个世界第一...

    初来乍到,这个人说话容易让人觉得"狂". "我们将比赛结果提交上去,果不其然,是第一名的成绩."当他说出这句话的时候,表情没有一丝波澜,仿佛一切顺理成章. 他说 ...

  5. 你不知道的Node.js性能优化,读了之后水平直线上升

    本文由云+社区发表 "当我第一次知道要这篇文章的时候,其实我是拒绝的,因为我觉得,你不能叫我写马上就写,我要有干货才行,写一些老生常谈的然后加上好多特技,那个 Node.js 性能啊好像 D ...

  6. 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅

    <一统江湖的大前端>系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你真的是有 ...

  7. vim开发环境配置

    一.大饱眼福 看了效果图,肯定有人说, 这都有啥功能?就花哨? 告诉你,你说花哨就错了,开玩笑?我们程序猿可都是实打实的人,说谎都不会,咋会忽悠人呢. 下面我来告诉你,这都有些什么功能: 文件索引功能 ...

  8. Vim改装成一个IDE编程环境

      1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个 ...

  9. 做IT这几年,我整理了这些干货想要送给你!

    没有一条路是容易的,特别是转行计算机这条路. 松哥接触过很多转行做开发的小伙伴,我了解到很多转行人的不容易,记得松哥大二时刚刚决定转行计算机,完全不知道这些东西到底应该怎么学,每天就是抱着书啃,书倒是 ...

随机推荐

  1. CORS(跨域资源共享)详解及与JSONP的对比

    上篇讲解的JSONP的跨域请求方式,但是在浏览器的支持及请求方式上有局限性,接下来将介绍一种新的跨域请求方式CORS. CORS是一个W3C标准,全称是"跨域资源共享"(Cross ...

  2. 【工匠大道】升级Mac下的svn,解决命令行不能使用svn的问题

    本文地址 原文地址 一. 为什么要升级SVN? 因为MAC上默认安装的是1.6版本,在使用时经常会提示SVN版本太旧,所以一定要升级 二. 怎么升级? 所有软件安装都是这三步吧,哈哈 第一步: 下载 ...

  3. win21api、win32gui、win32con三个模块操作系统窗口时一些小技巧

    下面这段脚本是操作一个浏览器上弹窗,打开文件窗口,由于脚本 执行速度快,当时未添加第2行的延时时,脚本顺利的执行成功,但弹的窗却没有进行操作,建议后续如果脚本执行到打开弹窗时,延时个几秒再去操作所弹窗 ...

  4. deeplearn.js

    http://blog.csdn.net/rongxiang111/article/details/78083867 <!DOCTYPE html> <html> <he ...

  5. C#编程の泛型编程

    什么是泛型 我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为 ...

  6. 为什么一定要学习linux系统?

    为什么一定要学习linux系统? linux诞生了这么多年,以前还喊着如何能取代windows系统,现在这个口号已经小多了,任何事物发展都有其局限性都有其天花板.就如同在国内再搞一个社交软件取代腾讯一 ...

  7. 自然语言处理之jieba分词

    在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...

  8. Bean named '*' must be of type [*], but was actually of type []

    本地Service 名字和调用别的maven项目Service重名

  9. python textwrap的使用

    参考:https://docs.python.org/3.6/library/textwrap.html textwrap模块提供了一些方便的函数,以及TextWrapper类,它执行所有的工作.如果 ...

  10. Sphinx 生成 Windows 帮助文件 (.chm文件)

    本文不介绍 Sphinx 的用法,只简要罗列 Windows 下生成 .chm 文件的步骤. 0. 首先检查机器是否安装了 HTML Help Workshop 软件,一般安装路径应该是 C:\Pro ...