乐趣区

JavaScript 简介

JavaScript 简介

一般来说,完整的 JavaScript 包括以下几个部分:

ECMAScript,描述了该语言的语法和基本对象;
文档对象模型(DOM),描述处理网页内容的方法和接口;
浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。

本文(系列)主要探讨 ECMAScript 的特性和应用,因为平时交流习惯用 JavaScript,后面都用 JavaScript 代替,实际上 JavaScript 是 ECMAScript 标准的实现和扩展。

JavaScript 是一门多范式的动态语言,包含类型、运算符、标准的内置对象和方法。关于 JavaScript 的设计思路,阮一峰老师是这么总结的:

借鉴 C 语言的基本语法;
借鉴 Java 语言的数据类型和内存管理;
借鉴 Scheme 语言,将函数提升到 ” 第一等公民 ”(first class)的地位;
借鉴 Self 语言,使用基于原型(prototype)的继承机制。

综合各家所长,发展出了一门多范式的动态语言:

多范式:支持命令式编程(流程控制语句)、支持函数式编程(函数是一等公民)、支持面向对象编程(原型扩展);

动态:

弱类型,使用 var 声明变量;
对象属性任意扩展;
解释执行语言,代码不进行预编译(浏览器端)。

JavaScript 发展历程

1995 年创建——Brendan Eich(Netscape 工程师);
1996 年首次发布——在 Netscape 2 上,当时被称为 LiveScript,因为和 sun 合作,搭上 Java 这个编程语言“热词”,重命名为“JavaScript”;
1997 年设立标准——ECMA 以 JavaScript 语言为基础制定了 ECMAScript 标准规范 ECMA-262;
1999 年发布第 3 版;
2009 年发布第 5 版(ES5);
2015 年发布第 6 版(ES6/ES2015);
2016 年发布第 7 版(ES7/ES2016);
2017 年发布第 7 版(ES8/ES2017);
2018 年发布第 7 版(ES9/ES2018)。

多了个年份的叫法,不查资料都搞不清哪来这么多标准。更多请查阅 ecma-262 或者维基百科 -ECMAScript。是不是有点奇怪,为啥没有 ES4 呢,因为 ES4 夭折了~~ 据说是 BE 大佬步子迈太大,组织上没同意,想简单了解的童鞋可以看下知乎上尤大的回答
JavaScript 语言特性
弱类型
JavaScript 使用 var、let、const 关键字来进行变量声明,除了 const 声明一个只读常量外,其他两种方式并不确定变量的类型:
var a=1
a={
name:’jack’
}
a=’lucy’
在 Java 强类型语言中必须这么写:
int a;
String b;
优点:
可以写出非常简洁的代码。
缺点:

写法随意,在没有良好编程规范的情况下写出来的可能是个雷区;

无法预检查。例如下面的函数,期望是数值,传入数值型字符串不会报错,返回的不是预期值从而导致 bug:
function add(a,b){
return a+b;
}
// 期望,return 3
add(1,2)
//bug,return ’12’
add(‘1′,2)

弱类型的缺点容易导致 bug,降低开发效率。开发建议:

变量声明表意清楚唯一;
写好 JSDoc 文档,函数的参数要求、返回值;
使用 TypeScript 等严格超集 阮一峰——强类型 JavaScript 的解决方案。

对象属性任意扩展
强类型语言 对象结构在声明时已经确定好,添加字段需要修改声明,JavaScript 的对象声明简单,扩展容易,写起来更轻松自由。
var cat={};
cat.name=’mimi’;
cat.age=1;
优点:
写起来方便;
var list=[];
$.ajax({

onSuccess(res){
list=res.data;
}
})
缺点:
不方便管理,使用不安全。
开发建议:

关键字段在声明时定义清楚;
不随意增删对象属性。

支持面向对象编程
JavaScript 中一切都是对象。
// ‘1’
1[‘toString’]()
而且对象的继承实现简单:

Javascript 面向对象编程(一):封装
Javascript 面向对象编程(二):构造函数的继承
Javascript 面向对象编程(三):非构造函数的继承

开发建议:
方式有很多种、使用 prototype 模式或者其他浅显易懂的方式来实现:
function Cat(name,color){
this.name = name;
this.color = color;
}

Cat.prototype.type = “ 猫科动物 ”;
Cat.prototype.eat = function(){alert(“ 吃老鼠 ”)};
支持函数式编程
安利一个系列 JavaScript 函数式编程(一)——佯真愚
总结

JavaScript 写法没有那么多的约束,入门简单;
JavaScript 灵活支持多种开发范式,能够适应多种开发要求。

软件开发是给工程性的活动,需要遵循原则,保障代码易用性,可阅读性。合理的利用 JavaScript 的特性,通过约束和规范高效的进行软件开发。
参考链接
MDN:A re-introduction to JavaScript (JS tutorial) 阮一峰老师:Javascript 诞生记云栖社区:《JavaScript 核心概念及实践》——1.2 JavaScript 语言特性维基百科:JavaScript、ECMAScript

退出移动版