JavaScript之糟粕】的更多相关文章

泪眼问花花不语,乱红飞过秋千去. JavaScript的糟粕 JavaScript语言是一门集精华与糟粕于一体的语言.在JavaScript: the good parts中,便集中讨论了关于精华与糟粕的主题.有兴趣的同学可以读读这本书,真的不错.基础不错的可以跳过前面的章节,直接进入附录的糟粕与鸡肋的部分.我呢,就先在这本书里列举几个我感兴趣的糟粕部分与大家分享: 全局变量 这恐怕是JavaScript当中最坑的部分了.先且不论全局变量的种种坏处了.在JavaScript中,定义一个全局变量是…
0.导言 在上篇<JavaScript之毒瘤>中,列举了一些在JavaScript中难以避免的问题特性.本篇将会展示JavaScript中有问题的特性,但我们很容易就能便面它们.通过这些简单的做法,让JavaScript称为一门更好的语言. 1.== JavaScript有两组相等运算符. === 和 !==,以及 == 和 !==. === 和 !== 不会进行类型转换,一般会按照你期望的方式工作.由于JavaScript的类型转换系统相当复杂,如果要确保==和 != 不出错,就必须要牢记转…
世界上的很多天才都在为构建更好的JavaScript而努力.已经有了很多尝试,其中最有前途的,无非就是CoffeeScript和TypeScript了.面对CoffeeScript,我有一见如故的感觉:而TypeScript也激发了我极大的兴趣.CoffeeScript和TypeScript一样,都是编译为JavaScript的语言,它们都增强了JavaScript的表达能力.这篇文章是讲CoffeeScript的,TypeScript将放在下一篇再讲. 所谓编译为JavaScript,是指Co…
今宵酒醒何处,杨柳岸,晓风残月 导引 我的JavaScript系列文章是我自己对JavaScript语言的感悟所撰写的系列文章.现在还没有写完.目前一共出了下面的系列: (三)我的JavaScript系列:不同调用方式的this指向 (四)我的JavaScript系列:原型链 (五)我的JavaScript系列:JavaScript的糟粕 (六)我的JavaScript系列:更好的JavaScript之CoffeeScript 你会注意少了(一)和(二).这篇不就是吗?下篇也是的.其实(一)和(…
在上篇Angular遇上CoffeeScript – NgComponent封装中,我们讲述了CoffeeScript这门小巧的语言,摒弃JavaScript中糟粕(“坑”)部分,并将JavaScript中精粹部分发挥到淋淋尽致.虽然笔者更喜欢ES6 + Babel或者TypeScript这类鲜明特性的JavaScript语法.但是CoffeeScript也不失为一门不错的JavaScript扩展语言,特别在Ruby社区仍然是一个很好的选择. 在本节中,我们将会利用CoffeeScript来模拟…
糟粕 全局变量 众所周知,全局变量在很小的程序中可能会带来方便,但随着程序变得越来大,全局变量将难以处理,全局变量将降低程序的可靠性. 在js中有3种方式定义全局变量 脱离任何函数安排一个var语句   //var foo=value; 直接添加一个属性到全局对象上  //window.foo=value; 直接使用未经声明的变更(其实这叫隐匿全局变量)    //foo=value; 作用域 众所周知,在JavaScript中没有块级作用域,而且在JavaScript有提升变量声明的功能,所以…
简介 我想这是在我总结JavaScript系列中最为需要注意的,最为重要的内容.你必须要去了解这些问题特性,才能准备好应对措施,这真的很重要. 毒瘤 全局变量 全局变量的存在的确是带来了方便,但是我觉得JavaScript对于全局变量的依赖性已经到达一种恐怖的状态.如果某些全局变量的名称碰巧和子程序中的变量名称相同,那么它们就会相互冲突,可能导致程序无法执行,而且不好调试. 文章中定义了三种定义全局变量的方式,分别是: 在任何函数之外放置一个var语句,这个和其他语言一样: var foo =…
话说这本书还是同学的推荐才读的,之前感觉这本书太薄了,不值得看,没想到小身材有大智慧,书中的内容总结的还是很到位的!所以就把最后几章,精华的部分整理整理. 优美的特性 函数是顶级对象 在JS中,没有块级作用域,都是以函数为最小的作用域,这样就可以把所有的变量放在函数的顶级声明.同时,也需要注意for循环,与java的使用方法就不一样了.即便是在for循环的体内,或者if语句中,声明的变量也是函数级别的. 而函数会延长作用域的范围,也就衍生出闭包这种概念,详细的还应该去参考<JS高级程序设计>,…
第一章 精华 1,JavaScript的函数(主要)基于词法作用域(lexical scoping)的顶级对象.强类型语言允许编译器在编译时检测错误,但弱类型很自由,无需建立复杂的类层次,不用做强制造型.JavaScript拥有强大的对象字面量表示法,这种表示法是JSON的灵感来源. 2,JavaScript有一个无类型的(class-free)对象系统,在这个系统中,对象可以直接从其他对象继承属性. 3,JavaScript依赖于全局变量来进行连接,所有编译单元的所有顶级变量被撮合到一个全局对…
众所周知,JavaScript作为弱类型语言,一直是精华与糟粕共存,许多"诡异"的地方我们不得不接受并使用.其实ES6(又称ECMAScript 2015)在2015年6月就已经正式发布了,其中提出的很多新的特性让JavaScript更加完善和丰富,对于前端开发者可谓一大福音. 目前各大浏览器的最新版本对ES6的支持度也越来越高,大部分的特性都实现了( ES6 支持 ).另外现在也有很多的转换器(如Babel),将ES6和ES7的代码转换为ES5的代码,这就意味着我们现在就可以使用这些…
作者:余博伦链接:https://zhuanlan.zhihu.com/p/23412169来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 和大家一样,最近我也看了Jose Aguinaga写的How it feels to learn JavaScript in 2016. 显然这篇文章击中了人们的痛处.它在Hacker News上排了不止一次第一.同样也是/r/javascript上最火的一篇,在Medium上也有超过10k的推荐. 这并不能算是哗众取宠:我很…
这周也是拿到了同程的offer,从此走上了前端之路!感谢我的贵人们.再次纪念一下~! 第11章 不是你的对象不要动 11.1 什么是你的 你的对象:当你的代码创建了这些对象或者你有职责维护其他人的代码的对象时,你就拥有这些对象. 不是你的对象: 原生对象(Object.Array等等) DOM对象(例如:Document) 浏览器对象模型(BOM)对象(例如: window) 类库的对象 11.2.1 不覆盖方法 JavaScript这门语言也存在着糟粕,那就是覆盖一个已经存在的方法是难以置信的…
第五章 UI层的松耦合 5.1 什么是松耦合 在Web开发中,用户界面是由三个彼此隔离又相互作用的层定义的: HTML是用来定义页面的数据和语义 CSS用来给页面添加样式 JavaScript用来给页面添加行为 我们的目标:确保对一个组件的修改不会经常性地影响其他部分. 结果: 遇到和文本或结构相关的问题,通过查找HTML即可定位 当发生了样式相关的问题,你知道问题出现在CSS中 对于那些行为相关的问题,你直接去JavaScript中找到问题所在 5.2 将JavaScript从CSS中抽离 I…
内容选自:<javascript语言精粹> 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'number','string','boolean','undefined','function','object';其中typeof(null),结果是'object' 3.number类型总是64位浮点数,两个整数相除也可能出现非整数结果 4.如果第一个运算数的值为假,那么运算符&&产生它的第一…
已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScript Dom 编程艺术>(ps:看过书评,网友对其褒贬不一,个人感觉还是不错的,适合初学者.不是每本书都能得到所有读者的认可,只能让部分适合的读者对其称赞,而我,就是其中一个). 前面介绍了JavaScript的一些常用方法,如何与DOM.HTML配合完成一些交互.今天主要介绍JavaScript在动画效…
Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function.prototype.method = function (name, func) { if (!this.prototype[name]) { this.prototype[name] = func; } return this; } 根据数字的正负来判断是使用Math.ceiling 还是Mat…
JavaScript语言精粹笔记 掌握语言的每个特性可以让你出风头,但是并不推荐,因为一部分的特性带来的麻烦可能远超本身的价值.正如书中所言,坏的材料并不能雕刻出好的作品,要成为一名更好的程序员,要取其精华去其糟粕.当你知道要做什么的时候,它还能表现的更好,编程时一件相对困难的事情,绝不应该在懵懂的状态下开始编程之旅. JS中的注意为//或者/*content*/,注释一定要精确地描述代码,不然没有用的注释比没有注释更糟糕. JS中的代码块不会创建新的作用域,因此变量应该被定义在函数的头部,而不…
一.in的用法 for...in 枚举一个对象的所有可枚举属性 检测DOM/BOM属性 if ("onclick" in elem) { // 元素支持onclick } if ("onerror" in window) { // window支持onerror } 检测js对象的原型属性(结合hasOwnProperty()函数) if ("attr" in obj && !obj.hasOwnProperty("at…
============================================================================== 一.世无英雄,遂使竖子成名 1 Web客户端编程语言事实上的王者 (1)JavaScript为何成功? 几乎所有的JavaScript书都会先介绍一番JavaScript的历史,比较有趣的是我在资料中看到这样一句话: JavaScript的设计者Brendan Eich曾在一次采访中说,JavaScript"几天就设计出来了".…
一.对象 JavaScript简单类型有数字.字符串.布尔值.null.undefined,其他所有的值都是对象(数组.函数.正则表达式都是对象). 数字.字符串.布尔值虽然拥有方法(包装对象),但并不是对象. 包装对象: 每当读取一个基本类型值的时候,后台会创建一个对象的基本包装类型的对象,从而能够调用一些方法来操作这些数据. var s1 = 'abcdefg' ; var s2 = s1.substring(2) ; 后台自动完成下列处理: 创建String类型的一个实例 在实例上调用指定…
javascript入门太容易了,导致几乎人人随便看看就能上手,零基础的人学个三五天都能对外宣称自己掌握了js.可是真正掌握js是一件很难的事情.如果在初学一门语言的时候第一想到的是问别人,是很难取得进步的.因为得到答案太容易,而不会去想为什么.而且说实话,js并不适合作为第一门编程语言,它兼容并包,容错性高,但这也意味着一但出错你就很难找到错误的原因.另一方面js有一些优秀的特性对于没有编程经历的人来说也很难发现. 如果你真想学好js,我有个大概的自学轨迹供你们参考. 第一步,学习w3scho…
最近看了<JavaScript语言精粹>,并且连着看了两遍,如果非要用言语形容的话,那我只能用4个字来形容:相见恨晚.其中的一些经验经过这么多年的摸索其实也了然,但是作者用这么浅薄的书把有着深厚蕴含的她深刻暴露出来的确值得我辈去拜读.JavaScript当初以风卷残云般的速度统治了浏览器端,其发布到正式成为ECMA规范也就1年多的时间,未经大规模检验的她,的确存在些糟粕性的语法,但其基于原型继承及函数式编程思想等等优秀的想法将其提升到语言的另一个层次上.以作者的话来说就是:JavaScript…
在写上一篇有关apply和call的博文时(闲聊JS中的apply和call),起初我还是担心大家理解起来比较困难,因为要理解apply调用方式的前提是,至少先理解在JavaScript中函数调用是什么?this到底代表什么意思?等等.不过从大家的反馈来看,我的担心是多余的,诸位园友都是高手,理解这些基础的东东是小菜一碟.话虽这样讲,不过今天我还是和大家聊聊JavaScript中与this相关的各种函数调用方式,可以把知识补充完整,日后回顾起来也比较方便. [背景介绍]光明小区是一个别墅小区,家…
在codewars里,确实可以学到很多很酷的方法,例如这一次的题目是判断数字是否为浮点型.我一开始是想有没有原生的js方法,像isNaN(),isFinite(),在前者Infinity是不属于NaN的,会返回false,所以有些时候并不好用.而后者则是判断是否为有效数字,包括无穷值和非数字的都会返回false.好啦,大概聊这么多也可以知道,js在某些地方还是提供了很多很好的全局函数供我们使用,但是却没有判断是否为浮点型的这一种方法. 因为我第一次遇到这个问题,脑袋确实不灵光,于是就想到用正则的…
又好久没写东西了,写上一篇的时候还以为接下来的工作会轻松一些,结果未从我所愿呐,又是一阵忙碌.而这段时间穿插着做了很多12年淘宝校园招聘的前端面试,很多同学都有问到,学校里没有前端的课程,那如何学习JavaScript?         我的回答是:读书吧~相对于在网上学习,在项目中学习和跟着有经验的同事学习,书中有着相对完整的知识体系,每读一本好书都会带来一次全面的提高.而如果深一脚浅一脚的学习,写出代码的质量会参差不齐.初学者的首要任务是成为靠谱的熟练开发者,能够稳定的输出有一定质量的代码,…
尽管我在生产环境中使用 JavaScript 长达 8 年之久了,但是,直到最近 2 年,我才开始学习如何正确地编写 JavaScript 代码,根据我对人们的理解,很多开发者都有类似经历.我们有相当一部分人用 PHP.ASP 等语言做网站,貌似把 JavaScript 当成了一种补充.然而,随着 NodeJS 的流行以及浏览器的发展,JavaScript 已经冲到了现代前端 web 开发的最前线. 我想在本文分享一些东西,我觉得它们是当今每个开发者都应该充分发挥 JavaScript 优势的技…
JavaScript对象与继承 JavaScript是我在C语言之后接触的第二门编程语言,大一暑假的时候在图书馆找了一本中国人写的JavaScript程序设计来看.那个时候在编程方面几乎还是小白,再加上那本书根本没有提JavaScript的编程机制,又有一些误导性的话,一直以来对JavaScript有很深的误解,认为JavaScript只是一门在浏览器上运行的面向对象语言,值此文来写下JavaScript当中很具有迷惑性和容易误解的地方.当然限于作者水平有限,也没有什么开发经验,所以难免有疏漏之…
正在看<javascript语言精粹>,遇到明显的特点就记录下来,以防看了白看(噗噗~) 为了不误导,形成错误印象,文中 ‘错误设计‘ 写成 ‘现有设计’,’正确设计‘ 写成 ’期待设计‘.然而期待只能是期待,因为他已经被使用的太广泛了...不能说改就改了 1.js中this指向: 函数调用有四种模式,方法调用.函数调用.构造器调用和apply调用模式. 现有设计:其中函数调用模式与其他不同,this被绑定到全局对象. 期待设计:绑到外部函数的this. 2.参数arguments并不是一个真…
JavaScript是一门最易让人误解的语言,该语言中精华与糟粕并存(可能比一般语言的这个比例要大一些):但“千淘万漉虽辛苦,吹尽黄沙始到金”,层层面纱下是易用灵活.优雅轻灵的内在.很久以前,JavaScript被当做是玩具语言,直到AJAX的出现,直到V8引擎的易用:这种局面已经改变. JavaScript诞生于1995年(那时我还很小):一个叫Brendan Eich的人设计了这种语言.他就职于Netscape公司,他说服了老总要开发这种语言.然而仅用了10天,10天.这门语言最初是用于解决…
1 6种值被当做假:false.null.undefined.空字符串''.数字0.数字NaN,其他所有值都为真,包括"false" 2 typeof有6种值,分别是'number','string','boolean','undefined','function','object';其中typeof(null),结果是'object' 3 如果第一个运算数的值为真,那么运算符||产生它的第一个运算数的值.否则,它产生第二个运算数的值.如,可利用||运算符来填充默认值var statu…