资讯专栏INFORMATION COLUMN

【JavaScript】语法

jsyzchen / 1557人阅读

摘要:注意使用操作符定义的变量将成为定义该变量的作用域中的局部变量,也就是说,在函数内部,用声明的变量叫局部变量,那么这个变量在函数退出后就会被销毁。局部变量报错如果省略了操作符,就相当于定义了一个全局变量,在函数外部的任何地方都可以访问到。

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表示)。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81981.html

相关文章

  • 火狐与IE的7个JavaScript差异

    摘要:在这篇文章中,我将会从个方面概述和在语法上的差异。获取标签的属性与上述类似,我们有不同的语法来获取标签的属性。这个示例代码是相当基础的,一般用作许多复杂事件处理的一部分,这里仅用来描述差异。语法语法透明处理这不是的语法问题,是通过设置的。 原文:http://www.impressivewebs.com/7-javascript-differences-between-firefox-...

    CoderBear 评论0 收藏0
  • JavaScript核心语法-基础语法

    摘要:基础语法区分大小写是一种区分大小写的语法,意味着的关键字变量名函数名以及其他一切的字符表示都要使用一致的大小写形式。化物语化物语空格和换行会忽略代码中出现的空格换行制表符。如果不用花括号独立独立编写一个语句,语法并不报错,但不推荐。 JavaScript基础语法 区分大小写 JavaScript是一种区分大小写的语法,意味着JavaScript的关键字、变量名、函数名以及其他一切的字符...

    soasme 评论0 收藏0
  • JavaScript】核心语法与变量与常量

    JS(JavaScript) 一。基础语法; 1.语法; 区分大小写; 他的标识符必须以大小写区分使用实为形式,不同的大小写代表不一样的意思 var aixinjueluo = 爱新觉罗; console.log(aixinjueluo); var Aixinjueluo = Aixinjueluo; console.log(Aixinjueluo); var AIXINJUELUO = AIXI...

    jaysun 评论0 收藏0
  • JavaScript基础语法 变量 常量 数据类型

    摘要:第十六天笔记基础语法区分大小写是一种区分大小写的语言的关键字变量名函数名以及任何其他的标识符必须适应一致的大小写形势卧龙前端空格和换行并不是的语法内容可有可无建议使用将代码书写的更加整洁美观更有可读性可选的分号分号可选项语法并不是强制要 第十六天笔记 JavaScript 基础语法 区分大小写 JavaScript是一种区分大小写的语言 JavaScript的关键字 变量名 函...

    xingpingz 评论0 收藏0
  • 带你入门 JavaScript ES6 (二)

    摘要:上一篇学习下一代语法一,我们学习了关于块作用域变量或常量声明和语法新的字符串拼接语法模版字面量数组元素或对象元素的解构赋值和对象字面量简写的相关知识。这便是扩展运算符的用途之一。 本文同步 带你入门 JavaScript ES6 (二),转载请注明出处。 上一篇学习下一代 JavaScript 语法: ES6 (一),我们学习了关于块作用域变量或常量声明 let 和 const 语法、...

    chanthuang 评论0 收藏0
  • 说说对JSX的认识

    摘要:认识引子最近几个月做的一个项目,使用了技术体系,自然而然的用到了。下面就总结一下自己对的认识。而这无疑增加了框架的门槛和复杂度。在被渲染之前,所有的数据都被转义成为了字符串处理。以避免跨站脚本攻击。表示对象将编译成调用。 JSX认识 引子 最近几个月做的一个项目,使用了react技术体系,自然而然的用到了JSX。下面就总结一下自己对JSX的认识。 什么是JSX 即JavaScript...

    clasnake 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<