3语言基础

本文详细介绍了JavaScript中的变量声明、作用域、类型系统以及严格模式。重点讨论了var、let和const的区别,包括变量提升和暂时性死区的概念。还提到了在异步操作和for循环中的行为差异,并探讨了数据类型和全等运算符。此外,文章还涉及了注释、性能优化和Unicode字符在标识符中的使用。
摘要由CSDN通过智能技术生成

语言基础


  1. JavaScript区分大小写,且标识符的规则如下:

    • 第一个字符必须是一个字母、下划线或美元符号$
    • 剩下的可以为字符、下划线、数字或$,其中的字母可以是Unicode中的字符,如À 和 Æ
    • 标识符按照惯例需要使用驼峰大小写
  2. 注释单行为//,多行为/**/

  3. 严格模式是一种不同的Javascript解析执行模型,某些不规范写法会在该模式下被处理,需要在想使用的地方添加"use strict",3.1.4

  4. 语句后添加分号有助于提升性能,在删除空行压缩代码时可以起作用

  5. ECMAScript变量是松散类型的,变量可以用于保存任何类型的数据

    1. var 不初始化情况下会保存undefined,且可以随时修改变量的类型

      • var操作符定义的变量会称为包含它的函数的局部变量,即在函数内部定义

      • 在函数内部定义变量省略var操作符,可以创建一个全局变量

      • var声明提升

        function foo(){
            console.log(age)
            var age = 26
        }
        foo()	//undefined
        //不会报错是因为运行默认为
        function foo(){
            var age
            console.log(age)
            age = 26
        }
        

        所谓的"提升",即将所有变量声明都拉到函数作用域的顶部,且反复使用var声明同一个变量也没有问题

    2. let let的所用域是块作用域,var是函数作用域

      • let不允许在同一个块作用域内出现冗余声明

      • 暂时性死区 let声明的变量不会在作用域中被提升,在let声明之前的执行瞬间被称为暂时性死区,在此阶段引用之后才声明的变量都将抛出ReferenceError

      • 全局声明 let在全局作用域中声明的变量不会成为window对象的属性

        var name = 'aaa'
        console.log(window.name)	//'aaa'
        
        let age = 14
        console.log(window.age)		//undefined
        
      • 条件声明 js引擎自动将多余的声明在作用域顶部合并为一个声明,由于let的作用域是块,因此不可能检查之前是否已经使用过let声明同名变量

    3. var与let的for循环

      • 当程序中存在异步操作

        for(var i = 0;i<5;i++){
            console.log('i:',i);
          }
        for(var j=0;j<5;j++){
          setTimeout(()=>{console.log('j:',j)},0)
        }
          /** 
           * i: 0
           * i: 1
           * i: 2
           * i: 3
           * i: 4
           * j: 5
           * j: 5
           * j: 5 
           * j: 5
           * j: 5
           */
        // 如果是let则两程序的结果相同
        /*
        	for循环是同步的,内部事件处理函数是异步的,即等到异步事件触发的时候,同步代码已经跑完,因此i是最大值
        	let处理的核心思想就是在跑完前就记录i的值,用于异步事件处理函数使用,js引擎会在后台为每个迭代循环声明一个新的迭代变量,每个setTimeout引用的都是不同的变量实例
        */
        
      • const 在声明变量时必须同时初始化变量,且尝试修改时会导致运行时错误,其与let基本相同

  6. 数据类型,即原始类型:undefined、null、Boolean、Number、String以及Symbol,以及一种复杂数据类型为Object,Object时一种无序名值对的集合

    1. 调用 typeof null 返回的是object,实际上是因为底层内存表示的问题,具体可以参考杂项
    2. 具体参考3.4.2
    3. isNaN() Number() parseInt() parseFloat() String() toString()
    4. 模板字面量 3.4.6.4
    5. 常用内置符号 3.4.7.4
  7. 全等以及不全等=== !==

  8. 等于记忆不等于== !=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值