语言基础

语法

标识符

注释

//

/*

*/

严格模式

// 也可以单独指定在一个函数中进行
'use strict'

语句

  1. 语句末尾分号不是必须的,但是最好加上
  2. 加上分号方便开发者删除空行压缩代码
  3. 有助于提高性能,因为浏览器会尝试在合适的位置补上分号以纠正语法错误
  4. if之类的,即使是单条语句,也建议加上大括号

保留字和关键字

变量

ECMAScript变量是松散类型的变量可以用于保存任何类型数据,每个变量只不过是一个用于保存任意值的命名占位符

声明变量:

  1. var
  2. let
  3. const

var声明提升

使用var声明的变量,声明语句会提升到作用域顶端

let声明

  1. let与var最大的区别在于let声明的是块作用域,var声明的是函数作用域,块作用域是函数作用域的子集
  2. let没有变量提升
  3. 对声明冗余报错不会因混用 let 和 var 而受影响。这两个关键字声明的并不是不同类型的变量, 它们只是指出变量在相关作用域如何存在
  4. 在let声明之前的执行瞬间被称为暂时性死区
  5. 使用 let 在全局作用域中声明的变量不会成为 window 对象的属性(var 声 明的变量则会)
  6. 对于 let 这个新的 ES6 声明关键字,不能依赖条件声明模式
  7. 用let来声明for循环的变量,每次循环迭代都会创建一个新变量

const语句

  1. const语句声明时必须初始化
  2. const声明的限制只适用于它指向的变量的引用

声明风格

  1. 不使用var
  2. const优先,let次之

数据类型

六种简单数据类型:

  1. Undefined
  2. Null
  3. Boolean
  4. Number
  5. String
  6. Symbol

typeof操作符

使用typeof操作符会返回以下字符串之一

  1. undefined
  2. boolean
  3. string
  4. number
  5. object
  6. function
  7. symbol

undefined类型

Undefined类型只有一个值,就是undefined

声明了变量但是没有初始化就相当给变量赋值了undefined

Null类型

null类型同样只有一个值,即特殊值null

从逻辑上讲,null表示一个空对象指针

在定义用来保存对象的变量时,建议使用null来初始化

Boolean 类型

有两个字面值,不同类型装Boolean的表格

  1. True
  2. False

Number 类型

  1. 使用IEEE 754表示整数和浮点数
  2. 八进制第一个数字必须是0,如果后面的数字超过了7就会忽略前缀0,八进制在严格模式下是无效的
  3. 由于保存浮点数所需空间是整数的两倍,所以ECMAScript总是想方设法的将值转换为整数
  4. 0.1 + 0.2 != 0.3 由于IEEE 754标准的精度问题(二进制无法精确的表示0.1与0.2
  5. 值的范围
    1. Number.MIN_VALUE
    2. Number.MAX_VALUE
    3. 如果计算的结果超过js可以表示的范围就会被转换为一个特殊的Infinity
    4. isFinite()函数可以用于判断值是否合法
    5. NaN(Not a Number) 用于表示本来将要返回数值的操作失败了(而不是抛出错误
      1. 例如 0/1
      2. 设计NaN的操作都会返回NaN
      3. isNaN()会尝试将一个值转换为数值,任何不能转换为数值的值都会返回true

String 类型

字符串表示:

  1. '' ''
  2. ' '
  3. ``

字符串的特点

  1. 字符串一旦创建就不能改变了,要修改某个字符串的值,就需要先销毁原先字符串,然后再生成新的字符串
  2. toString() , 如果是数值调用时,可以添加一个底数参数
  3. 模板字符串
    1. 字符串插值
    2. 原始字符串 String.raw
    3. 标签函数
function tagFunction(strings, aValExpr, bValExpr, sumValExpr) {

 console.log(strings);

 console.log(aValExpr);

 console.log(bValExpr);

 console.log(sumValExpr);

 return sumValExpr;

}

let a = 1,

 b = 2;

let taggedResult = tagFunction `${a} + ${b} = ${a + b}`;

console.log(taggedResult);

/**

 * [ '', ' + ', ' = ', '' ]

 * 1

 * 2

 * 3

 * 3

 */

Symbol 类型

ES6新增

Object 类型

  1. constructor
  2. hasOwnProperty(propertyName)
  3. toLocaleString()
  4. toString()
  5. valueOf()

操作符

一元操作符

  1. 递增递减操作符
  2. 一元加和减

位操作符

  1. 位操作考虑32位即可 ,虽然ECMAScript中的所有值都以IEEE754 64位格式存储,但位操作并不直接应用64位,而是将值先转为32位
  2. 负数以二进制补码存储
  3. 按位非:~(对数值取反并减1)
  4. 按位与:&(将两个数的每一位对齐,然后每一位进行与操作)
  5. 按位或:|
  6. 按位异或:^
  7. 左移:<<
  8. 有符号右移:>>
  9. 无符号右移:>>>

布尔操作符

  1. 逻辑非:!
  2. 逻辑与:&&(短路特性)
  3. 逻辑或:||

乘性操作符

  1. 乘法操作符
  2. 除法操作符

指数操作符

  1. **, 也可以使用Math.pow()
  2. **=

add operator

  1. add: +
  2. sub: -

relationship operator

  1. >
  2. <
  3. >=
  4. <=

equal operator

  1. ==(only judge whether the value is equal)
  2. !=
  3. === (judge value as well as data type)

assignment operator

  1. =
  2. combine with other operator

comma operator

doing multiple operation in one sentence

let num = 1, num2 = 2, num3 = 3;

sentence

if

while

loop

do-while

a while sentence that test it after doing a loop

do {
// statement
} while (expression)

for

the 'for' sentence have initial code.

for-in

a strict iteration sentence, enumerated properties in an object

if the object that will be enumerated is null or undefinde, the loop sentence will not be executed.

for (property in expression) {
// statement
}

for-of

a strict iteration sentence, enumerated elements in an object

for (property of expression) {
// statement
}

label sentence

The label sentence is using to add label to sentence.

// syntax
label: statement;
// example
let count = 5; start: for (let i = 0; i < count; i += 1) { console.log(i); if (i === 2) continue start; }

break & continue

with

The useness of 'with' is setting the code scope to a certain object

let obj = {
age: 12,
name: 'azoux',
}; with(obj) {
console.log(name); // azoux
console.log(age); // 12
}

the strict mode would not allowed the use of 'with'.

switch

switch(expression) {
case value1:
statement
break;
case value2:
statement
break;
// case n
default:
break;
}

the reason why we add 'break' sentence to all cases is to avoid unnecessory judgement.

function

The best practice is that a function either returns a value or does not return a value. Functions that return values only under certain conditions will bring

Trouble, especially when debugging.

Javascript高级程序设计第三章 | ch3 | 阅读笔记的更多相关文章

  1. javascript高级程序设计第三章的一些笔记

    [TOC] 1. 语法 1.1 区分大小写 变量.函数名和操作费都区分大小写. 1.2 标识符 标识符指变量.函数.属性的名字,或者函数的参数.标识符按以下规则组合: 第一个字符必须是一个字母,下划线 ...

  2. JavaScript高级程序设计 第三章 基本概念

    ch3 基本概念 标签(空格分隔): JavaScript 语法 标识符 - 第一个字符必须是字母.下划线或美元 - 驼峰大小写格式 严格模式 ECMAScript5引入,定义了一种解析和执行模型.此 ...

  3. javascript高级程序设计第三章

    看后总结: 1.区分大小写 2.标识符是有字母下划线$开头,并有字母.下划线.数字.美元符号组成. 3.建议用驼峰法命名标识符. 4.注释: 单行:// 多行: /*   */ 5.严格模式: 在js ...

  4. Javascript高级程序设计 -- 第三章 -- 总结

    1.Javascript有几种数据类型 2.变量 Javascript有几种数据类型 JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Nu ...

  5. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  6. 《JavaScript高级程序设计》——第二章在HTML使用JavaScript

    这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...

  7. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  8. JavaScript高级程序设计第三版-读书笔记(1-3章)

    这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript   提供核心语言功能 DOM     提供访问 ...

  9. 《JavaScript高级程序设计第三版》——细碎知识痛点整理(第六章)

    面向对象的程序设计 对象是一组没有特定顺序的值6.1.1 属性类型ECMAScript中有两种属性:数据属性和访问器属性.1. 数据属性Configurable 表示能否通过delete删除属性从而重 ...

  10. 读Javascript高级程序设计第三版第六章面向对象设计--创建对象

    虽然Object构造函数或者对象字面量都可以用来创建单个对象,但是缺点非常明显:使用同一接口创建很多对象,会产生大量重复代码. 工厂模式  1 function CreatePerson(name,a ...

随机推荐

  1. 可观测|时序数据降采样在Prometheus实践复盘

    简介: 基于 Prometheus 的监控实践中,尤其是在规模较大时,时序数据的存储与查询是其中非常关键,而且问题点较多的一环.如何应对大数据量下的长周期查询,原生的 Prometheus 体系并未能 ...

  2. 云原生微服务的下一站,微服务引擎 MSE 重磅升级

    ​简介:管好微服务,成为云原生时代的新难题. 管好微服务,成为云原生时代的新难题. 从建好微服务到管好微服务,差的虽是一个字,连接起两边的却需要大量的微服务落地经验.因为软件架构的核心挑战是解决业务快 ...

  3. [FAQ] IDE: Goland 注释符后面添加空行

    如图所示,Code Style 对应语言 Go 勾选上注释空行的选项. Refer:Goland官网 Goland下载 Link:https://www.cnblogs.com/farwish/p/1 ...

  4. WPF 已知问题 RadioButton 指定 GroupName 后关闭窗口可能导致无法选中

    本文记录一个 WPF 已知问题,当 WPF 的 RadioButton 指定 GroupName 且将 IsChecked 状态绑定到 ViewModel 上,将包含以上控件的代码的窗口显示两个,接着 ...

  5. 2019-11-29-WPF-Process.Start-出现-Win32Exception-异常

    title author date CreateTime categories WPF Process.Start 出现 Win32Exception 异常 lindexi 2019-11-29 10 ...

  6. k8s-1.28版本多master部署

    一.环境准备 k8s集群角色 IP 主机名 安装相关组件 kubernetes版本号 控制节点 192.168.10.20 master apiserver.controller-manager.sc ...

  7. containerd基本使用命令

    一.containerd简介 官 方 文 档 : https://containerd.io 在 2016 年 12 月 14 日,Docker 公司宣布将containerd 从 Docker 中分 ...

  8. vue-router设置页面切换滑动效果的方法及解决遇到的坑

    先上gif:这里演示顺序是1232121 1.router.js中配置入口路由 {     path: '/',     redirect: '/index'   } 2.main.js中new vu ...

  9. 八、Doris外部表及数据导入

    DorisDB提供了多种导入方式,用户可以根据数据量大小.导入频率等要求选择最适合自己业务需求的导入方式. 数据导入:  1.离线数据导入:如果数据源是Hive/HDFS,推荐采用 Broker Lo ...

  10. ansible系列(21)--ansible的变量注册Register

    1. 变量注册Register register 关键字可以将某个 task 任务结果存储至变量中,最后使用 debug模块 输出变量内容,可以用于后续排障: 示例一:register的基本使用: # ...