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操作符(用于确定任意变量的数据类型)
  • 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。

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

  1. JavaScript高级程序设计第四版学习--第二十四章

    title: JavaScript高级程序设计第四版学习–第二十四章 date: 2021-5-31 10:46:01 author: Xilong88 tags: JavaScript 本章内容: ...

  2. JavaScript高级程序设计红宝书学习笔记第三章基本概念

    第三章 基本概念 本章内容 语法 数据类型 操作符 语句 函数 3.1 语法 3.1.1 区分大小写,ECMAScript中的一切(变量.函数名和操作符)都区分大小写. 3.1.2 标识符 标识符:变 ...

  3. JavaScript高级程序设计[第3版]

    JavaScript高级程序设计[第3版] package xyz.huning.toolkit.pdf;import java.io.FileOutputStream; import java.io ...

  4. JavaScript高级程序设计 第4版----String

    JavaScript高级程序设计 第4版----String 文章目录 JavaScript高级程序设计 第4版----String 1.JavaScript 字符 2.字符串操作方法 1.conca ...

  5. 阅读JavaScript高级程序设计(第二版)笔记

    第一章js简介 JavaScript诞生在1995年,当时负责进行输入型验证. JavaScript是一种专为与网页交互而设计的脚本语言,分为 : 1. ECMAScript核心语言功能. 2.文档对 ...

  6. 《JavaScript高级程序设计 第3版》-学习笔记-1

    P1-P30页 1.<script>标签的属性 async:async(html)  | async="async"(xhtml),表示立即下载脚本,但不马上执行(执行 ...

  7. 新书-JavaScript高级程序设计:第2版(预订中,估价)

    http://www.china-pub.com/196857 JavaScript的应用在广度和深度上日益扩大和加深,前端开发亟待掌握的JavaScript技能也越来越具有挑战性. 这个新版本几乎全 ...

  8. javascript 高级程序设计(第4版)阅读笔记(三)

    第3章,内容很长,所以更得慢,主要讲的是ECMAScript   es的语言基础:语法.数据类型.基本操作符.流控制语句.理解函数,ECMAScript 的语法很大程度上借鉴了 C 语言和其他类 C  ...

  9. javascript高级程序设计第3版——第6章 面向对象的程序设计

    第六章--面向对象的程序设计 这一章主要讲述了:面向对象的语言由于没有类/接口情况下工作的几种模式以及面向对象语言的继承: 模式:工厂模式,构造函数模式,原型模式 继承:原型式继承,寄生式继承,以及寄 ...

  10. JavaScript高级程序设计 第4版 -- 操作符

    3.5 操作符 3.5.1一元操作符 前缀版: 变量的值会在语句被求值前改变 后缀版: 递增递减在语句被求值后才改变 let age = 29; let anotherAge = --age + 2; ...

最新文章

  1. 【ACM】连续出现的字符
  2. C++(STL):04---智能指针之weak_ptr
  3. 编码-京东实习笔试编程题-糖果问题-动态规划
  4. grep、sed命令使用记录
  5. Kaggle新手入门之路(完结)
  6. Unity下载文件一(www协程下载)
  7. 中国将在大连建立下一个硅谷
  8. (转)直击马云虞锋闭门对话,3小时谈透未来变革大势,定调千亿美元目标
  9. C# matlab中标准差计算方法
  10. 名利双收的公益创业,“汇新杯”响应时代召唤助力公益创业
  11. Oracle与MySQL的备份还原及密码修改等
  12. C语言中getch()、getche()、getc()、getchar()、gets()、fgetc()、fgets()的区别与使用
  13. fiddler--HTTP协议调试工具
  14. Spec2006使用说明
  15. 一文读懂背照式CMOS图像传感器
  16. 损耗的基础知识(中)
  17. html视频怎么转换成图片,WPS演示如何将图片转换成视频?
  18. 2012年5月编程语言排行榜:C再次位居第一 Java 占有率持续下降
  19. 利用opencv带你玩转人脸识别-中篇(人脸检测,检测多个,视频检测快速入门)
  20. 爱鸿森技术引进创新方法

热门文章

  1. Java温习——表达式expression
  2. 量子计算(十):量子计算原理
  3. 最小二乘法线性拟合及其代码实现(C语言)
  4. Smart200控制两台V90伺服,绝对定位和速度控制
  5. oracle rfs进程过多,dg同步后RFS进程起不来,归错于ORA-00604和ORA-16000
  6. 应用程序框架 Application Framework
  7. 公司企业常见部门名称英译(zt)
  8. java如何获取当前时间 年月日 时分秒
  9. golang_微信头像过期失效
  10. CAN总线学习:MM32