语言基础

语法

标识符

注释

//

/*

*/

严格模式

// 也可以单独指定在一个函数中进行
'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. 消息队列Kafka「检索组件」重磅上线!

    ​简介:本文对消息队列 Kafka「检索组件」进行详细介绍,首先通过对消息队列使用过程中的痛点问题进行介绍,然后针对痛点问题提出相应的解决办法,并对关键技术技术进行解读,旨在帮助大家对消息队列 Kaf ...

  2. Snowflake如日中天是否代表Hadoop已死?大数据体系到底是什么?

    ​简介: 本文作者关涛是大数据系统领域的资深专家,在微软(互联网/Azure云事业群)和阿里巴巴(阿里云)经历了大数据发展20年过程中的后15年.本文试从系统架构的角度,就大数据架构热点,每条技术线的 ...

  3. [Go] flag package 指南: 命令行参数标记的解析

    flag 是 Golang 的官方包. 支持用法有三种,不同之处是二三两种用法是 Var() 函数可以绑定 flag 到一个变量上. 直接调用指定类型的函数有多种,如 flag.String(), B ...

  4. [FE] Chrome Extension 五步曲

    1. Create the manifest.jsonOnly three fields is needed. { "name": "Getting Started Ex ...

  5. 如何参与 .NET 的开发和设计

    现在 dotnet 属于 dotnet 基金会,所有开发者都可以向 dotnet 贡献代码和参与 .NET 的设计,参与路线决策.本文来告诉大家一些基本玩法,带着小伙伴们入坑 注意哦,参与 dotne ...

  6. Istio微服务入门---通过istio部署微服务实现灰度发布(15)

    一.Istio简介 1.1 Istio介绍 官方文档:https://istio.io/docs/concepts/what-is-istio/ 中文官方文档:https://istio.io/zh/ ...

  7. STM32F10X 部分引脚不能使用的问题

    一.概述 说来惭愧,我到现在都没有完整的学习过STM32.接触 STM32 还是突然的一个项目,需要用到 STM32,紧急需求,只能边学边完成.不过好在 ST 的资料还是比较多的,相对也比较简单,基本 ...

  8. netcore依赖注入通过反射简化

    aspnetcore里面用到许多的service,好多业务代码都要通过Service.AddScoped.Singleton.Transient等注入进去,类太多了写起来和管理起来都很麻烦,所以借鉴了 ...

  9. Elasticsdump 数据导入/导出

    目录 一.安装过程 安装NODE 通过npm安装elasticdump 二.数据导出 实操一 实操二 实操三 三.文件导入 一.安装过程 当前工具主要是用来对ES中的数据进行数据导入/导出,以及对数据 ...

  10. ubuntu安装 vmware workstation pro 15.1.1

    BIOS开启虚拟化 如果没有就参考下面的连接地址设置 http://robotrs.lenovo.com.cn/ZmptY2NtYW5hZ2Vy/p4data/Rdata/Rfiles/726.htm ...