Javascript高级程序设计第三章 | ch3 | 阅读笔记

语言基础

语法

标识符

注释

//

/*
*/

严格模式

// 也可以单独指定在一个函数中进行
'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.

上一篇:BZOJ 4305 数列的GCD


下一篇:YY的GCD