JavaScript-语法、变量

简介: 标识符、注释、关键字,变量声明

壹——语法

1、区分大小写

在ECMAScript中,所有的东西都是要区分大小写的。无论是变量名,常量名还是操作符,函数名。比如变量PersonNum和变量personNum是不一样的。

2、标识符

标识符,就是变量、函数、属性和函数参数的名称。

标识符必须以字母、下划线、$开头;剩下的可以是字母、数字、下划线和$。

按照惯例, ECMAScript 标识符使用驼峰大小写形式,即第一个单词的首字母小写,后面每个单词的首字母大写。(一点也不强制哦~)

注意:关键字、保留字、 true、 false 和 null 不能作为标识符。    

3、注释

// 单行注释

/*  

这是多行注释

这是多行注释

 */      

4、严格模式

ECMAScript 5 新增了严格模式,字面意思就是严格按照规范写法进行检查。如果编写的代码不符合规范,将会抛出异常。

要对整个脚本启用严格模式,在脚本开头加上这一行:"use strict"; 它是一个预处理指令,任何支持JavaScript的引擎都会切换到严格模式。

严格模式还可以单独的放到某个函数中,只需要把    "use strict" 放到函数体的开始位置就可以了。

functionstrictDemo(){

   "use strict";

   //函数处理的内容

   

}

所有现代浏览器都支持严格模式。  

(本人做毕设的时候深受其害,还有编辑器的自动格式化)

5、语句

ECMAScript 中的语句以分号结尾。  如果你的程序没有分号,编译器会自动解析在哪断句(编译器:解析错了可别怪我)。

letsnake="head"+"body"+"tail"     //没有分号仍然有效,但是不建议这么做

letsum  =a+b;                        //有分号,在此处结尾

加分号,好处多多,可以避免缺少分号带来的问题,同时可以使开发者删除空行,减小代码体积,还能减少解析器的工作量。

6、关键字

关键字不能作为自定义函数名、变量名等等。都是有特殊用途的一串。


break do in typeof
case else instanceof var
catch export new void
class extends return while
const finally super with
continue for switch yield
debugger function this default
if throw delete import
try

未来的保留字,留作将来做关键字用的。

始终保留:enum

严格模式下保留:implements package publicinterface protected staticlet private

模块代码中保留:await


贰——变量

ECMAScript中有三个关键字可以声明变量:varconstlet。其中,var在ECMAScript的任何版本都可以用,constlet只能在ECMAScript 6及以后的版本中使用。

1、var关键字

varmessage1;   //定义一个变量,名字为message

varmessage2='hi';    //定义一个变量message并赋值为'hi'

message2=1000;          //合法,有效,但不推荐

上述代码中的第一行定义了一个名为 message1 的变量,可以用它保存任何类型的值。在未初始化的情况下,变量会保存一个特殊值undefined。

第二行定义了一个名为message2的变量,并保存字符串值 hi   ,像这样初始化变量不会将它标识为字符串类型,只是一个简单的赋值而已。随后,不仅可以改变保存的值,也可以改变值的类型。

使用 var 操作符定义的变量会成为包含它的函数的局部变量。比如在一个函数内部使用var定义一个变量,那么在函数执行完毕后,退出函数时会销毁。


functiondemo(){

   vartest1='test';

   console.log(test1);      

}

demo();     //会打印字符串'test'

console.log(test1);       //会报错

functiondemo2(){

   userName='zhangsan';

   console.log(userName);

}

demo2();      //输出字符串 'zhangsan'

console.log(userName);   //输出字符串 'zhangsan'


但是如果在函数内定义变量时,省略var关键字,则userName变量会变成全局变量(只需要调用一次demo2()函数)。

注意:虽然可以在函数内通过省略var关键字定义全局变量,但是并不推荐这么做,主要是有时候不好找,也想不到它是一个全局变量,容易搞混。

连续定义多个变量的时候,只需要用逗号(英文状态下)分隔开就行。

varmessage='hi',userName='zhangsan',age=18;

2、let 声明

letvar 的作用差不多,但有着非常重要的区别。最明显的区别是, let 声明的范围是块作用域,而 var 声明的范围是函数作用域。

块级作用域:即在{}花括号内的域,由{ }包括,比如if{}块、for(){}块;

函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的;

if (true) {

   letage=26;

   letage ;       //报错,因为age已经声明过了,同一个块内不能重复声明

   console.log(age); // 26

}

console.log(age); //  age 没有定义,因为已经超出if块了

//同一个块中没有重复声明,所以不会报错

letage=30;

console.log(age); // 30

if (true) {

   letage=26;

   console.log(age); // 26

}

letuserName;

varuserName;   //报错,因为let 和var定义的是同种类型的变量,只是标明的作用域不同。


let 和 var还有一个区别是,let定义的变量,在声明之前不能使用,否则会报错。var定义的变量有声明提升,在定义之前就可以使用。在使用 var 声明变量时,由于声明会被提升, JavaScript 引擎会自动将多余的声明在作用域顶部合并为一个声明。因为 let 的作用域是块,所以不可能检查前面是否已经使用 let 声明过同名变量,同时也就不可能在没有声明的情况下声明它。

使用 let 在全局作用域中声明的变量不会成为 window 对象的属性( var 声明的变量则会)。

还有一点是,在使用for循环时两者有区别。

for(vari=1;i<=5;i++){

   //循环体

}

console.log(i);     // i==5

for(leti=1;i<=5;i++){

   //循环体

}

console.log(i);      //报错,i未定义

3、const声明

const 的行为与 let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且尝试修改 const 声明的变量会导致运行时错误 。

constage=24;

age=22;    //报错,给常量赋值

constuserName='zhangsan';

constuserName='lisi';    //报错,不能重复声明

//const 也是块级作用域

constsex='man';

if(taiguo==true){

   constsex='women';

}

console.log(sex);   //  输出为 'man'



如果const声明的是一个对象,那么修改这个对象内部的属性并不报错。

constperson= {

   

}

person.name='zhangsan';    //不会报错

for(consti=0;i<5;i++)  //报错,不能给常量赋值

4、总结

1、不使用var,或者少使用var。

2、const优先,let次之。


12-7.jpg

相关文章
|
23天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
25天前
|
JavaScript 前端开发
JavaScript 中如何检测一个变量是一个 String 类型?
JavaScript 中如何检测一个变量是一个 String 类型?
21 2
|
30天前
|
JavaScript 前端开发 Web App开发
JavaScript基础语法(codewhy版本)(一)
JavaScript基础语法(codewhy版本)
88 1
JavaScript基础语法(codewhy版本)(一)
|
1月前
|
JavaScript 前端开发 网络架构
JavaScript的数组教程(最详细,更新至es6新语法)
JavaScript的数组教程(最详细,更新至es6新语法)
|
1月前
|
移动开发 前端开发 JavaScript
Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(下)
Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(下)
|
1月前
|
JavaScript 前端开发 Java
Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(中)
Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(中)
|
1月前
|
JavaScript 前端开发 Java
Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(上)
Java 和 JavaScript 的奇妙协同:语法结构的对比与探索(上)
|
1月前
|
JavaScript 前端开发 容器
javascript中的变量定义
javascript中的变量定义
|
1月前
|
存储 JavaScript 前端开发
编程笔记 html5&css&js 075 Javascript 常量和变量
编程笔记 html5&css&js 075 Javascript 常量和变量
|
2月前
|
存储 JavaScript 前端开发
【JavaEE初阶】 JavaScript基础语法——贰
【JavaEE初阶】 JavaScript基础语法——贰