语言基础

语法

标识符

注释

//

/*

*/

严格模式

// 也可以单独指定在一个函数中进行
'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. [Contract] Truffle 使用流程

    Installation $ npm install -g truffle Choose ethereum client (Ganache OR truffle build in `truffle d ...

  2. dotnet 在析构函数调用 ThreadLocal 也许会抛出对方已释放

    我在不自量力做一个数组池,就是为了减少使用 System.Buffers.dll 程序集,然而在数组池里面,所用的 ThreadLocal 类型,在我对象析构函数进行归还数组时,抛出了无法访问已释放对 ...

  3. 国内常用源开发环境换源(flutter换源,python换源,Linux换源,npm换源)

    国内开源镜像站点 大学 清华大学开源软件镜像站 (使用较多) 中国科学技术大学开源软件镜像 (使用较多) 浙江大学开源镜像站 (主要是各发行版Linux,pip等常用库) 哈尔滨工业大学开源镜像站 ( ...

  4. 使用open webui+ollama部署本地大模型

    使用open webui+ollama部署本地大模型 上次使用了angthingllm + ollama部署了本地大模型,详情见:https://www.cnblogs.com/jokingremar ...

  5. 🎉 Socket.D v2.4.12 发布(新增 python 实现)

    Socket.D 协议? Socket.D 是一个网络应用协议.在微服务.移动应用.物联网等场景,可替代 http.websocket 等.协议详情参考<官网介绍>. 支持: tcp, u ...

  6. Competition Set - AtCoder II

    这里记录的是这个账号的比赛情况. ABC310 2023-7-15 Solved:6/8 1973->2053 七场ABC,两场打得蛮烂的,都因为AT炸掉Unrated了:另外五场全部满Perf ...

  7. 利用神经网络对脑电图(EEG)降噪------开源的、低成本、低功耗微处理器神经网络模型解决方案

    具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 这个示例展示了如何使用EEGdenoiseNet基准数据集[1]和深度学习回归去除脑电图(EEG ...

  8. 在jeecg-boot中密码的使用

    1.生成密码并入库保存 String id= SnowflakeIdUtil.nextValue();//生成id operatCompany.setId(id); String salt = oCo ...

  9. WPF 稳定的全屏化窗口方法

    本文来告诉大家在 WPF 中,设置窗口全屏化的一个稳定的设置方法.在设置窗口全屏的时候,经常遇到的问题就是应用程序虽然设置最大化加无边框,但是此方式经常会有任务栏冒出来,或者说窗口没有贴屏幕的边.本文 ...

  10. 4G 信令中的 PCO 字段

    目录 文章目录 目录 Protocol Configuration Option Protocol Configuration Option PCO(Protocol Configuration Op ...