《JavaScript高级程序设计》- 第三章:语言基础

本文详细介绍了JavaScript的基础知识,包括语法、关键字与保留字、变量、数据类型、操作符和语句。强调了区分大小写、严格模式、变量的var、let、const的区别,以及数据类型如Undefined、Null、Boolean、Number、String、Symbol的特点。同时,文章提到了操作符的使用,如一元、位、布尔、乘性、指数等,并讨论了if、do-while、while、for等语句。最后,对函数进行了预览,总结了JavaScript的主要数据类型。
摘要由CSDN通过智能技术生成

博客

zyzcos.gitee.io

第三章:语言基础

3.1 语法

ECMAScript语法很大程度上借鉴了C以及其他类C语言

3.1.1 区分大小写

ECMAScript严格区分大小写

3.1.2 标识符

什么是标识符?

标识符:变量、 函数、 属性或函数参数的名称,可以由一个或多个下列字符组成:

  • 第一个必须是字母、下划线或美元符号
  • 剩下其他字符可以是字母、下划线、美元符号或数字

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

3.1.3 注释
  • // 单行注释
  • /* 多行注释 */
3.1.4 严格模式

什么是严格模式?

严格模式:一种不同的JavaScrtip解析和执行模型。对不安全的活动将抛出错误

如何使用严格模式?

在脚本开头加上:"use strict",表示至此之下的所有代码遵循严格模式,也可以用于块级代码

注意事项:

一般在很多框架中都不推荐使用严格模式,因为会损耗性能

3.1.5 语句

ECMAScript中的语句以分号结尾。 省略分号意味着由解析器确定语句在哪里结尾:

  let sum = a + b // 没有分号也有效, 但不推荐
  let diff = a - b; // 加分号有效, 推荐

3.2 关键字与保留字

ECMA-262描述了一组保留的关键字, 这些关键字有特殊用途.

ECMA-262第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

未来的保留字,保留字就是未来将会作为关键字,目前先保留,不予以使用:

以下是ECMA-262第6版为将来保留的所有词汇。

始终保留:

enum

严格模式下保留:

implements package public

interface protected static

let private

模块代码中保留:

await

3.3 变量

ECMAScript中的变量与其他语言的变量有什么不同?

ECMAScript中的变量是松散类型的,即:变量可以保存任何类型的数据【可以理解为:变量就是一个命名占位符

有哪些声明变量的方法?

3.3.1 var

使用方法

 var message = 'hello world';

有什么特点?

  1. 具有声明作用域:

    使用var声明变量,会存在于包含它的函数的局部作用域。

      function sayHi(){
        var message = 'hi';  // 局部变量
      }
      console.log(message); //出错
    
      function sayHello(){
        message = 'hello';  // 全局变量
      }
    
      console.log(message); // "Hello"
    

    注意:尽量不要使用全局变量,因为不好维护!

  2. 声明提升:

    使用var声明变量,变量的声明自动提升该作用域的顶部

      function show(){
        console.log(message);
        var message = 'hi';
      }
      show(); // 输出undefined
    
      // 其实是这样的:
      function show(){
        var message;  // 这就是变量提升(hoist)
        console.log(message);
        message = 'hi';
      }
      show(); // 输出undefined
    
3.3.2 let

使用方法与var相似

有什么特点?

  1. let声明的范围是块级作用域,var声明的范围是函数作用域

      if(true){
        var name = 'zyzc';
        console.log(name);  // zyzc
      }
      console.log(name);  // zyzc
    
      if(true){
        let message = 'hi';
        console.log(message); // hi
      }
      console.log(message); // 抛出异常:message未定义
    
  2. 不允许出现冗余【var可以】:

      var name;
      var name; //不会报错
    
      let age;  
      let age;  // 抛出异常,age已经声明了。
    
  3. 暂时性死区:

    let与var的另一个重要的区别, 就是let声明的变量不会在作用域中被提升。

    // name会被提升
    console.log(name); // undefined
    var name = 'Matt';
    // age不会被提升
    console.log(age); // ReferenceError: age没有定义
    let age = 26;
    

    在let声明之前的执行瞬间被称为“暂时性死区”(temporal dead zone),在此阶段引用任何后面才声明的变量都会抛出ReferenceError

  4. 全局声明:

    与var关键字不同, 使用let在全局作用域中声明的变量不会成为window对象的属性【var声明的变量则会】

    var name = 'Matt';
    console.log(window.name); // 'Matt'
    let age = 26;
    console.log(window.age); // undefined
    
  5. for中使用let声明:

    使用let声明循环变量,不会渗透到循环以外

      for(var j=0 ; j<5 ; j++){
        setTimeout(() => console.log(j),0);
      }
      // 输出 5 5 5 5 5 
      for(let i=0 ; i<5 ; i++){
        setTimeout(() => console.log(i),0);
      }
      // 输出 0 1 2 3 4
    
3.3.3 const

使用方法与let相似

const的行为与let基本相似,区别在于const声明的时候必须初始化变量,且后续不可修改

3.3.4 注意
  • 不推荐使用var
  • const优先、let次之。

3.4 数据类型

有哪些数据类型?

  • 6种简单数据类型(原始类型):Undefined、Null、Boolean、Number、String、Symbol
  • 1种复杂数据类型:Object【无序名值对的集合】
3.4.1 typeof 操作符

有什么作用?

用来确定任意变量的数据类型

如何使用?

  console.log(typeof name);

操作符会返回下列字符串之一:

  • ni"undefined"表示值未定义;
  • "boolean"表示值为布尔值;
  • "string"表示值为字符串;
  • "number"表示值为数值;
  • "object"表示值为对象(而不是函数) 或null;
  • "function"表示值为函数;
  • "symbol"表示值为符号。

注意:null是一个指向空对象的引用。

3.4.2 Undefined类型

Undefined类型只有一个特殊值undefined。当var、let声明未赋值的时候,就会自动赋值undefined

注意:

  1. 未定义与undefined的区别
      let message;
      console.log(message); // undefined
      console.log(name); // 报错
    
  2. 关于某些操作的问题
      let message;
      console.log(typeof message); // undefined
      console.log(typeof name);   // undefined
    

综上可看出,某些操作【typeof delete】会混淆,不

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值