JavaScript词法结构:
- 文本相关:JavaScript将换行符,回车符和回车/换行序列识别为终止符
- 保留字:有些关键字(如let),因为要兼容旧程序不能完全保留。例如在类外部通过var声明的变量可以用let作为变量名,但在类内部使用const声明时不行。
- Unicode归一化
- 可选的分号,在JavaScript语法中不像Java一样以分号作为语句结束的标志;如果语句以(,[,/,+或 - 开头就有可能被解释为值钱语句的一部分,因此我们在开发中要避免这种情况,但如果有用到,就要在这些语句前面都防御性的添加一个分号。类似于下面:
let x = 0 // 这里是省略分号
;[x,x+1,2*x].forEach(console.log) // 防御:保证这条语句独立
- 一定不能在return、break或者continue等关键字和他们后面的表达式之间加入换行符,如果一不小心加入了换行符,后面调试会非常麻烦,因为错误不明显。
- 使用箭头函数时,箭头=>必须和参数列表在同一行。
动态语言和静态语言
我是看到下面这句话,才对这两个名词起了兴趣
JavaScript与静态语言更大的差别在于函数和类不仅仅是语言的语法,它们本身就是可以被JavaScript操作的值,就是对象。
我当时就想是不是和强/弱类型语言类似,后来发现动态语言等同于弱类型语言,静态语言等同于强类型语言
在下面补充一句话
计算机通过操作值(如数值3.14)或文本(如hello word)来工作。编程语言中这些可以表示和操作的值被称为类型。
一门语言支持的类型是这门语言最基本的特征。变量的工作方式则是一门编程语言的另一个基本特征。
静态语言(强类型语言)
静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。
例如:C++、Java、Delphi、C#等。
动态语言(弱类型语言)
动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等。
强类型定义语言
强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
弱类型定义语言
数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。
两者区别
特性
- 强类型语言是一旦变量的类型被确定,就不能转化的语言。
- 弱类型语言则反之,一个变量的类型是由其应用上下文确定的。
静态语言的优势
- 由于类型的强制声明,使得IDE有很强的代码感知能力,故,在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中,依托IDE对系统的开发很有保障;
- 由于静态语言相对比较封闭,使得第三方开发包对代码的侵害性可以降到最低;
动态语言的优势
- 思维不受束缚,可以任意发挥,把更多的精力放在产品本身上;
- 集中思考业务逻辑实现,思考过程即实现过程;