【JavaScript】语法

2.1 语法

2.1.1 辨别大小写

JavaScript中的统统(变量、函数名和操纵符)都辨别大小写。比方变量名test和变量名Test代表的是两个差别的变量。

2.1.2 标识符

标识符是指变量、函数、属性的名字,或函数的参数。

标识符花样划定规矩:

第一个字符必须是一个字母、下划线(_)或一个美圆标记($)
其他字符可所以字母、下划线、美圆标记或数字。
根据通例,JavaScript标识符采纳驼峰大小写花样,也就是第一个字母小写,剩下的每一个有意义的单词的首字母大写。

myName

注重:不能把关键字、保留字、true、false和null用作标识符。

2.1.3 诠释

单行诠释:

// 单行诠释

多行诠释(/**/):

/*
* 多行诠释,这一行星号非必须
*/

2.1.4 严厉形式

ECMAScript 5 引入了严厉形式(strict mode)的观点。严厉形式是为JavaScript定义了一种差别的剖析与实行模子。

在严厉形式下,ECMAScript 3中的一些不肯定的行动将得到处置惩罚,而且对某些不安全的操纵也会抛出毛病。

能够在全部剧本中启用严厉形式,也能够在函数内的顶部启用:

"use strict";
function doSomething(){
"use strict";
// 函数体
}

2.1.5 语句

ECMAScript中的语句以一个分号末端;假如省略分号,则由剖析器肯定语句的末端。

强烈建议在可用可不必分号的处所运用分号,因为加上分号,能够防止许多意想不到的毛病,而且也能够宁神的运用紧缩工具来紧缩JavaScript剧本。

2.2 关键字和保留字

ECMA-262形貌了一组具有特定用处的关键字,这些关键字可用于掌握语句的最先或完毕,或许用于实行特定操纵等,不能用作标识符。

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

ECMA-262还形貌了一组不能用作标识符的保留字:

abstract  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

假如运用关键字作标识符,会致使“Identifier Expected”毛病。

2.3 变量

ECMAScript的变量是松懈范例的,所谓松懈范例就是能够用来保留任何范例的数据。定义变量时要运用var操纵符,后跟变量名。

var name;
注重:运用var操纵符定义的变量将成为定义该变量的作用域中的局部变量,也就是说,在函数内部,用var声明的变量叫局部变量,那末这个变量在函数退出后就会被烧毁。

function test(){
var name = 'tg';  //局部变量
}
test();
console.log(name);  // 报错

假如省略了var操纵符,就相当于定义了一个全局变量,在函数外部的任何处所都能够接见到。

function test(){
name = 'tg';  //局部变量
}
test();
console.log(name);  // "tg"

不引荐省略var操纵符。

另有一种隐式全局变量:

function test() {
  var a = b = 0;
}
test();
console.log(b);  // 0
console.log(a);  // ReferenceError: a is not defined

在上面的代码中,因为从右至左的操纵符优先级,所以表达式“b=0”是先实行的,而此时b未经由声明,所以它会成为全局变量。

注重:
运用var建立的全局变量不能删除。
不适应var建立的隐含全局变量能够运用delete删除(因为它并非真正的变量,而是全局对象window的属性)。

function test() {
    var a = b = 0;
    delete a;
    delete b;
    console.log(a);  //  0
    console.log(b);  // ReferenceError: b is not defined
}
test();

2.3.1 变量提拔

变量提拔是指一切变量的声明语句,都会被提拔到代码的头部。

在函数内也一样,函数中的一切变量声明会在函数实行时被“提拔”至函数体顶端。

看个例子:

console.log(a);  // undefined
var a = 1;
function test(){
   console.log(a);  // undefined
   var a = 2;
}
test();

效果是否是有点出乎你的预料。
实在JavaScript的实行环境分为声明阶段和实行阶段,因而关于上面的代码,JavaScript会如许诠释代码:

var a;
console.log(a);  // undefined
a = 1;
function test(){
  var a;
   console.log(a);  // undefined
   a = 2;
}
test();

2.3.2 复制变量值

假如从一个变量向另一个变量复制基础范例的值,会在变量对象上建立一个新值,然后把该值复制到为新变量分派的位置上。

var num1 = 5;
var num2 = num1;
num2 += 5;
console.log(num1);  //5
console.log(num2);  // 10

从上面例子的效果,我们晓得num1中的5和num2中的5是完整自力的,num2中的5只是num1中的5的一个副本。

当从一个变量向另一个变量复制援用范例的值时,一样会将存储在变量对象中的值复制一份放到为新变量分派的空间中。差别的是,这个值的副本现实上是一个指针,而这个指针指向存储在堆中的一个对象。复制操纵完毕后,两个变量现实大将援用同一个对象。因而,转变个中一个变量,就会影响到另一个变量。

var obj1 = new Object();
var obj2 = obj1;
obj2.name = 'tg';
console.log(obj1.name);  // "tg"

在上面的例子中,我们将obj1赋给了obj2,二者就指向了同一个对象,然后给obj2添加了一个属性name,接着接见obj1中的name,发现值和obj2中的name是一样,因为这两个变量援用的都是同一个对象。

2.4 空格、换行符

JavaScript会疏忽顺序中标识符之间的空格。在大多数情况下疏忽换行符。

我们能够运用空格和换行来进步代码的可读性。

除了能够辨认一般的空格符(u0020),JavaScript还能够辨认以下示意空格的字符:

程度制表符(u0009)
垂直制表符(u000B)
换页符(u000C)
不中缀空表(u00A0)
字节序标记(uFEFF)
JavaScript会将以下字符辨认为行完毕符:

换行符(u000A)
回车符(u000D)
行分隔符(u2028)
段分隔符(u2029)
回车符加换行符在一起被剖析为一个单行完毕符。

2.5 Unicode转义序列

JavaScript定义了一种特别序列,运用6个ASCII字符来代表恣意16位Unicode内码。这些Unicode转义序列码均以u为前缀,厥后追随4个十六进制(运用数字以及大写或小写的字母A~Fa~f示意)。

    原文作者:sgosky
    原文地址: https://segmentfault.com/a/1190000008688508
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞