简介:js工作原理
基本概念:语法、操作符、数据类型、内置功能
用以上基本概念去构建复杂解决方案的基本概念
基于ECMA-262第三版中定义的JavaScript
3.1语法
参考C及其他 类C语言(如Java和Perl)的语法。
3.1.1区分大小写
ECMAScript中的一切都区分大小写 变量、函数名、操作符
3.1.2标识符
标识符:变量、函数、属性的名字,或者函数的参数。
标识符可以是按照下列各式规则组合起来的一或多个字符:
rule1:第一个字符不许是字母、下划线(_)或者一个美元符号($)
rule2:其他字符可以是字母、下划线、美元符号或者数字
tips:
ECMAScript内置函数采用驼峰大小写格式:第一个字母小写,剩下的每个单词的首字母大写
标识符也采用驼峰大小写作为最佳实践
不要将关键字保留字null、true、false作为标识符
3.1.3注释
单行注释
// 单行注释
块级注释:
rule:/*开头 */结尾
/*
* 这是一个多行
* (块级)注释
*/
3.1.4严格模式
ECMAScript5引入了严格模式(strict mode)的概念。
严格模式是为JavaScript定义了一种不同的解析和执行模型。在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。
tips:将严格模式视为编译指示(pragma),告诉JavaScript引擎切换到严格模式
在整个脚本中启用严格模式
“use strict”;
在函数中启用严格模式
function dosomething(){
"use strict";
//函数体
}
3.1.5语句
ECMAScript中的语句以一个分号结尾如果省略分号,则有解析器确定语句的结尾,如下例所示:
var sum = a + b //即使没有分号也是有效的语句——不推荐
var diff = a - b; //有效的语句——推荐
tips:推荐使用分号:
-
避免错误
-
删除多余的空格不会出现压缩错误
-
增加代码性能,解析器就不必再花时间推测应该在哪里插入分号
多条语句的代码块,代码块以左花括号( { )开头,以右花括号( } )结尾
if(test) {
test = flase;
alert(test);
}
条件控制语句中,单条语句也推荐使用代码块
if(test){
alert(test) // 有效但容易出错,不要使用
}else{
alert(test); // 推荐使用
}
3.2关键字和保留字
关键字 可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照原则,关键字也是语言保留的,不能用作标识符。
tips:* 表示第五版新增的关键字
break | do | instanceof | typeof |
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger(*) | function | this | with |
default | if | throw | |
delete | in | try |
保留字: 当前在这门语言中没有用途,但它们有可能在将来被用作关键字。
ECMAScript第3版保留字
abastract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
ECMAScript第5版保留字 (非严格模式)
class | enum | extends | super |
const | export | import |
ECMAScript第5版保留字 (严格模式)
implements | package | public |
interface | private | static |
let | protected | yield |
注意,let和yield是第5版新增的保留字;其他保留字都是第3版定义的。为了最大程度地保证兼容性,建议读者将第三版定义的保留字外加let和yield作为编程时的参考。(为保证兼容性,ECMAScript3 的保留字也要有let yield)
在实现了ECMAScript3的JavaScript引擎中使用关键字做标识符,会导致“Indentifier Expected”错误,保留字作标识符不一定会导致错误,具体取决于特定的引擎。
ECMAScript5使用关键字和保留字规则进行了少许修改。关键字保留字 不可做为标识符,但可作为属性值。此处不推荐使用,考虑将来的js兼容性。
ECMAScript5对eval和arguments还加了限制。严格模式下不能作为标识符属性名。