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

相关文章
|
24天前
|
JavaScript 前端开发 容器
盘点JavaScript中所有声明变量的方式及特性
本文详细介绍了JavaScript中变量定义的多种方式,包括传统的`var`、`let`和`const`,以及通过`this`、`window`、`top`等对象定义变量的方法。每种方式都有其独特的语法和特性,并附有代码示例说明。推荐使用`let`和`const`以避免作用域和提升问题,谨慎使用`window`和`top`定义全局变量,不建议使用隐式全局变量。掌握这些定义方式有助于编写更健壮的JS代码。
36 11
|
3月前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
127 12
|
3月前
|
前端开发 JavaScript 数据处理
CSS 变量的作用域和 JavaScript 变量的作用域有什么不同?
【10月更文挑战第28天】CSS变量和JavaScript变量虽然都有各自的作用域概念,但由于它们所属的语言和应用场景不同,其作用域的定义、范围、覆盖规则以及与其他语言特性的交互方式等方面都存在明显的差异。理解这些差异有助于更好地在Web开发中分别运用它们来实现预期的页面效果和功能逻辑。
|
3月前
|
前端开发 JavaScript UED
如何使用 JavaScript 动态修改 CSS 变量的值?
【10月更文挑战第28天】使用JavaScript动态修改CSS变量的值可以为页面带来更丰富的交互效果和动态样式变化,根据不同的应用场景和需求,可以选择合适的方法来实现CSS变量的动态修改,从而提高页面的灵活性和用户体验。
|
4月前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
4月前
|
JavaScript 前端开发
局部 JavaScript 变量
JavaScript 中,函数内部使用 `var` 声明的变量为局部变量,仅在函数内可见,函数执行完毕后被删除。全局变量则在函数外部声明,整个页面的脚本和函数均可访问,页面关闭后才被删除。未声明的变量赋值会自动成为 `window` 对象的属性,且在非严格模式下可被删除。
|
4月前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
90 0
|
4月前
|
JavaScript 前端开发
什么是JavaScript变量?
什么是JavaScript变量?
52 0
|
5月前
|
JavaScript 前端开发
JavaScript如何判断变量undefined
JavaScript如何判断变量undefined
|
5月前
|
JavaScript 前端开发
js 变量作用域与解构赋值| 22
js 变量作用域与解构赋值| 22

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    45
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55