JavaScript高级程序设计(第4版)学习随笔【第三章】

ECMAScript语法:

  • 区分大小写

    • 一切都区分大小写。无论是变量、函数名还是操作符都区分大小写
  • 标识符(变量、函数、属性或函数参数的名称)

    • 第一个字符必须是一个字母、下划线或美元符号$
    • 剩下的其他字符可以是字母、下划线、美元符号或数字
    • 标识符使用驼峰大小写形式,例如myCar
    • 注意关键词不能作为标识符(如true、null等)
  • 注释

    • 单行注释
    • 多行注释在这里插入图片描述
  • 严格模式

    • 严格模式下,一些不规范的写法会被处理,抛出错误。
    • 启用严格模式,需加上"use strict"(预处理指令)
  • 语句

    • 语句以分号结尾(没有分号也有效,但不推荐)
    • 多行语句可以用{ }包裹起来,以{开始,以}结束(代码块)
if (test) {
	test = fasle;
	console.log(test);
}
  • 关键字和保留字
    在这里插入图片描述
  • 变量
    • ECMAScript变量是松散类型,可以用于保存任何类型数据(此处可去了解typeScript)
    • 声明变量有三个关键词:var let const(后两者只有在ECMAScript6以后版本使用)
    • var声明作用域
      使用var操作符定义的变量会成为包含它的函数的局部变量,在函数退出时销毁
function test() {
	var a = 'hello world'
}
test()
console.log(a) // 出错

// 省略var操作符定义全局变量 不推荐 局部作用域内定义全局变量很难维护
function test1() {
	b = 'hello world 1'
}
test()
console.log(b) // 'hello world 1'
  • var声明提升
    var声明的变量会自动提升到函数作用域的顶部
    在这里插入图片描述
    例如上面代码不会报错,是因为var声明会被提升到函数作用域顶部,ECMAScript运行时把它看以下代码
    在这里插入图片描述
    不用var时
    在这里插入图片描述

  • let声明

    • let声明跟var差不多,最明显的区别是let声明范围是块作用域,var是函数作用域
      在这里插入图片描述
  • 块作用域是函数作用域的子集,所限制var的也适用于let

  • let不能重复声明
    在这里插入图片描述

  • let和var还有一个重要的区别,let声明在作用域中不会被提升。

  • 全局声明
    与var关键词不同,使用let在全局作用域中声明的变量不会成为window对象的属性(var会)
    在这里插入图片描述

  • 条件声明
    let声明全局变量的时候,不确定同页面其他脚本有没有声明了同名变量,可用以下方式声明,可避免因重复声明而抛出错误。
    在这里插入图片描述

  • for循环中的let声明
    let出现之前,使用var声明,会渗透到循环体的外部
    在这里插入图片描述
    在这里插入图片描述

  • const声明
    const和let基本相同,唯一一个重要区别是用const声明变量时必须同时初始化变量,且不能修改变量。(const声明的限制只适用于它指向的变量的引用)

  • 声明风格及最佳实践

    • 尽量不使用var(行为怪异的var所造成的各种问题,已经让JavaScript社区为之苦恼了很多年)
    • const优先,let次之
  • 数据类型

    • ECMAScript有6种简单数据类型(也称原始类型):Undefined、Null、Boolean、Number、String、Symbol。(Symbol是ECMAScript6新增的)
    • 还有一种复杂数据类型叫Object(对象)【小菜叽发出疑惑:啊咧咧,奇怪,为 什么没有Array数组】
    • typeof操作符(用于确定任意变量的数据类型)
      使用:typeof
  • Undefined类型(只有一个值,就是特殊值undefined),声明了变量未初始化就相当于给变量赋予了undefined值

  • Null类型,null值表示一个空对象指针(typeof null返回object,就是因为特殊值null被认为是一个对空对象的引用)

  • Boolean类型
    在这里插入图片描述

  • Number类型

    • 特殊数值NaN,意思是“不是数值”(No A Number)
    • isNaN()函数 该函数接收一个参数 可判断该参数是否数值或是否能转换成数值
  • 数值转换

  • 有三个函数可将非数值转换为数值:Number()、parseInt()、parseFloat()

  • Number()函数转换字符串相对复杂且有点反常规,所以用parseInt()取整数,parseFloat()转换取小数。

  • String类型 字符串可以使用双引号(")、单引号(’)或反引号(`)标示

    • 字符字面量:字符串数据类型包含一些字符字面量(用于表示非打印字符或其他用途的字符)
    • 转义字符表示一个字符,所以只算一个字符,字符串中有双字节字符,那么返回的length可能不准确
    • 字符串的特点 一旦创建 值就不能变了 要修改变量中某个字符串值,必须要先销毁原始字符串,再将新修改的字符串赋值给该变量(拼接字符串会比较慢的原因)
    • 可用toString()将其他类型值转为字符串。
    • 模板字面量
      ECMAScript6新增使用模板字面量定义字符串的能力。
      在这里插入图片描述
      `用来定义HTML模板特别好用
      在这里插入图片描述
  • 字符串插值 `常量${变量}`
    所有插入的值都会使用toString()强制转型为字符串

  • 模板字面量也支持定义标签函数,这个感兴趣可以搜一下看

  • Symbol类型
    ECMAScript6新增类型。符号是原始值,且符号实例唯一、不可变的,用于确保对象属性使用唯一标识符,不会发生属性冲突

let genericSymbol = Symbol(); 
let otherGenericSymbol = Symbol();  
let fooSymbol = Symbol('foo'); 
let otherFooSymbol = Symbol('foo');
 console.log(genericSymbol == otherGenericSymbol); // false 
 console.log(fooSymbol == otherFooSymbol); // false 

在这里插入图片描述
Symbol()函数不能与new关键词一起构造函数使用,避免创建符号包装对象。

Symbol还有很多深入的学习点,比如Symbol.asyncIterator等等,目前没想到使用场景,难理解一点,耗时多,暂放后面一点深入学习。(目前水平难以支撑 呜呜)

  • Symbol.match用法 匹配字符串中是否含有某子串
    在这里插入图片描述- Symbol.replace用法 替换字符串中的子串
    在这里插入图片描述
    效果一样 有个小疑惑 为什么不直接用第二句
  • 更多内容:Symbol.search 、Symbol.species 、Symbol.split 、Symbol.toPrimitive 、 Symbol.toStringTag 、 Symbol.unscopables(这个不推荐使用)

- Object类型
以前不太清楚toLocaleString()和toString()的区别,现在总算懂了一些
1、超过4位数字时toLocaleString()会增加逗号间隔,适合金额之类的数值
在这里插入图片描述
2、对时间的表示
在这里插入图片描述
对了别忘记了valueOf()
在这里插入图片描述
在这里插入图片描述
valueOf()对时间的处理等同于时间的getTime()

  • 操作符

    • 一元操作符(只操作一个值)
      递增/递减操作符
      ++a (或a++)等价于 a = a + 1
      –a (或a–)等价于 a = a - 1
      (前缀优先级高,如–a + 2语句会先处理完–a再进行+2,而a-- + 2 会先处理a+2)

    • 一元加和减
      在这里插入图片描述

    • 位操作符(操作内存中表示数据的比特(位))
      由于位操作是在数值的底层表示上完成的,所以速度快得多,有按位 非、按位与、按位或、按位异或、左移、有符号右移、无符号右移等。

    • 布尔操作符
      1、逻辑非(!)
      先将操作数转换成布尔值,再取反。
      2、逻辑与(&&)
      3、逻辑或(||)

    • 乘法操作符(*)

    • 除法操作符(/)

    • 取余操作符(%)

    • 指数操作符(**)(es7新增 等价于 Math.pow())

    • 加法操作符(+)不仅仅能处理数值的加,也可用于字符串拼接。

    • 关系操作符(< 、>、<=、>=)

    • 相等操作符

      • == 等于 (强类型转换后对比)
      • !== 不等于 (强类型转换后对比)
      • === 全等 (不转换直接对比)
      • !== 不全等 (不转换直接对比)
        -
        在这里插入图片描述
        推荐使用全等和不全等
    • 条件操作符(?)

    let value = 1 > 2 ? true : false // false  三目运算
    
    • 赋值操作符(=)
    • 逗号操作符(,)声明多个变量
  • if语句
    if(条件){符合条件}else{不符合条件}

  • do-while语句
    do{循环体}while(退出循环条件)

  • while语句
    while(满足循环条件){循环体}

  • for语句
    for(let i = 0; i < 10; i++) {循环体}

  • for-in语句(适用于对象)
    for(const a in b){枚举b所有的属性}
    在这里插入图片描述

  • for-of语句(适合用于取值)
    for(const a of b) {枚举b所有的属性}
    区别:
    在这里插入图片描述

  • ES2018还增加了for-await-of语句

  • break和continue语句

  • with语句(不推荐使用,严格模式下该语句会抛出错误)
    针对一个对象反复操作,可缩减代码量
    在这里插入图片描述

  • switch语句(如果表达式等于后面的值,则执行下面的语句)
    switch(判断的值){
    case 值1:
    break;
    case 值2:
    break;
    default: 默认走
    break
    }

  • 函数
    function关键词声明
    function aFun(参数) {执行语句} 那么aFun就是一个方法 通过函数名来调用方法

  • 小结

    • ECMAScript中的基本数据类型包括Undefined、Null、Boolean、Number、String和Symbol。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值