这一章节我是硬着头皮讲的。因为:
JavaScript曾是“世界上最被误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax的到来,JavaScript“从最受误解的编程语言演变为最流行的语言”,这除了幸运之外,也证明了它其实是一门优秀的语言。
PS:我一直记得这不是最初的版本,中文翻译是《Javascript语言的精粹和糟粕》
那多少精粹多少糟粕呢?
我简单的总结一下(在同学们漫长的职业生涯中,一点一滴的体会):
错误不是暴露出来,而是“想当然”的处理,埋下一颗一颗的地雷。比如,假设我们有这样一行代码:
var result = score - 10;
因为种种原因(用户输入错误,或者代码bug),score中存储的不是一个数值,而是一个文本值,比如空字符串(' '):
@想一想@:哪一种处理方式最好?为什么?
记住:问题越早暴露越好,越早越好。
PS:初入职场的同学,千万不要犯JavaScript的错误!
如果是其他语言,变量必须:
var score = 98; alert(score); score = 100;
但是JavaScript呢?(演示)
这就是很多开发人员说的JavaScript的自由和灵活。但这就真的好么?
复习:Java对C++的删改
例子不胜枚举!JavaScript学到后面,有一堆让你头痛的东西:闭包、原型链、this……,但这不是你的问题,而是JavaScript本身的问题:缺乏逻辑自洽!
JavaScript里一堆一堆的
就像撒了一个谎,就要用无数的谎来圆一样,要把bug解释成特性,难度也不是一般的大呀!o(╥﹏╥)o
举个最简单的例子:
var result = "abc"-2; //会将NaN(Not a Number)赋值给result,OK,将就吧,那么: result == NaN; //false?what? result != NaN; //true,哪位大神给解释下为什么? 12 == NaN; //无计可施…… 'ABC' == NaN
好吧,JavaScript站出来说:不要用==和!=来判断一个变量是不是NaN,我们提供一个isNaN()的方法,如果true的话,就是不是一个数值(我没写错,翻译过来逻辑就这样的)……
isNaN(result) //好像没问题 isNaN(12) //false,转个弯还能理解 isNaN('12') //你猜 isNaN('') //你再猜
怎么定义/解释isNaN()的确切含义?判断能否用作数值计算的?要记得''-10=-10哟。但是:
isNaN({}) //true,{}不能做为数值运算 {}-10 //-10,直接疯掉了……
还有一些完全没法洗的小bug,比如年日都从1开始算,就月从0开始算……
入鲍鱼之肆,久闻而不知其臭。
或者,“没有对比,就没有伤害!”
为什么我一直强调不要只学前端?我很担心初学者一开始接触的就是JavaScript,然后就染上了这种稀里糊涂写代码的毛病,甚至认为:
“这样挺好的呀!(字符串和数值)C#/Java里面还要做类型转换才能运算,JavaScript直接就可以比较,灵活!赞一个……”
三观都坏了,就没救了。
1995年,网景公司的Brendan Eich(甚至有人说那时候他是才进公司的实习生?)在两周之内设计出了JavaScript语言:所以JavaScript先天不足,缺陷很多。
JavaScript之父对JavaScript的评价:
与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物……
和Java的关系?NO,NO,NO,就北大青鸟和北大的关系一样 —— 完全没有关系,就是蹭Java的热点。
但是,这个“娘不在(网景就被1998年11月,网景被AOL收购)爹不爱”的孩子,最终成为前端霸主!为什么呢?
因为没得选:在Web世界里,只有JavaScript能跨平台、跨浏览器驱动网页,与用户交互。
说来话长,姑妄听之:
飞哥个人看好TypeScript(由C#之父领导),废除其弱类型特性,未来JavaScript最有可能的替代者!(美好愿望,^_^)
JavaScript是主要运行在浏览器中的解释型的编程语言。(编译解释的区别详见后文)
JavaScript的解释器:一般就是浏览器(例外:V8和node.js)。
面向过程:C语言家族风格
函数是JavaScript的一等公民:回调和事件,把函数玩得贼溜!
弱弱的面向对象:装而不封、模拟继承、天然多态
由于会议的气氛,该版本的项目代号起名为Harmony(和谐)
其中,ES5和ES6是最具历史意义的两个版本。
基于JavaScript的特点,我们将其分成两个部分:
JavaScript入门,包括最基本的:
以能使用JQuery及其相关插件为教学目标。
添加ES6模块化、工程化部分内容,以能熟练应用大前端框架vue.js为教学目标。
多快好省!前端后端,线上线下,名师精讲
更多了解 加: