Javascript高级程序设计第三章 | ch3 | 阅读笔记
语言基础
语法
标识符
注释
//
/*
*/
严格模式
// 也可以单独指定在一个函数中进行
'use strict'
语句
- 语句末尾分号不是必须的,但是最好加上
- 加上分号方便开发者删除空行压缩代码
- 有助于提高性能,因为浏览器会尝试在合适的位置补上分号以纠正语法错误
- if之类的,即使是单条语句,也建议加上大括号
保留字和关键字
变量
ECMAScript变量是松散类型的,变量可以用于保存任何类型数据,每个变量只不过是一个用于保存任意值的命名占位符
声明变量:
- var
- let
- const
var声明提升
使用var声明的变量,声明语句会提升到作用域顶端
let声明
- let与var最大的区别在于let声明的是块作用域,var声明的是函数作用域,块作用域是函数作用域的子集
- let没有变量提升
- 对声明冗余报错不会因混用 let 和 var 而受影响。这两个关键字声明的并不是不同类型的变量, 它们只是指出变量在相关作用域如何存在
- 在let声明之前的执行瞬间被称为暂时性死区
- 使用 let 在全局作用域中声明的变量不会成为 window 对象的属性(var 声 明的变量则会)
- 对于 let 这个新的 ES6 声明关键字,不能依赖条件声明模式
- 用let来声明for循环的变量,每次循环迭代都会创建一个新变量
const语句
- const语句声明时必须初始化
- const声明的限制只适用于它指向的变量的引用
声明风格
- 不使用var
- const优先,let次之
数据类型
六种简单数据类型:
- Undefined
- Null
- Boolean
- Number
- String
- Symbol
typeof操作符
使用typeof操作符会返回以下字符串之一
- undefined
- boolean
- string
- number
- object
- function
- symbol
undefined类型
Undefined类型只有一个值,就是undefined
声明了变量但是没有初始化就相当给变量赋值了undefined
Null类型
null类型同样只有一个值,即特殊值null
从逻辑上讲,null表示一个空对象指针
在定义用来保存对象的变量时,建议使用null来初始化
Boolean 类型
有两个字面值,不同类型装Boolean的表格
- True
- False
Number 类型
- 使用IEEE 754表示整数和浮点数
- 八进制第一个数字必须是0,如果后面的数字超过了7就会忽略前缀0,八进制在严格模式下是无效的
- 由于保存浮点数所需空间是整数的两倍,所以ECMAScript总是想方设法的将值转换为整数
- 0.1 + 0.2 != 0.3 由于IEEE 754标准的精度问题(二进制无法精确的表示0.1与0.2
- 值的范围
- Number.MIN_VALUE
- Number.MAX_VALUE
- 如果计算的结果超过js可以表示的范围就会被转换为一个特殊的Infinity
- isFinite()函数可以用于判断值是否合法
- NaN(Not a Number) 用于表示本来将要返回数值的操作失败了(而不是抛出错误
- 例如 0/1
- 设计NaN的操作都会返回NaN
- isNaN()会尝试将一个值转换为数值,任何不能转换为数值的值都会返回true
String 类型
字符串表示:
- '' ''
- ' '
- ``
字符串的特点
- 字符串一旦创建就不能改变了,要修改某个字符串的值,就需要先销毁原先字符串,然后再生成新的字符串
- toString() , 如果是数值调用时,可以添加一个底数参数
- 模板字符串
- 字符串插值
- 原始字符串 String.raw
- 标签函数
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 类型
- constructor
- hasOwnProperty(propertyName)
- toLocaleString()
- toString()
- valueOf()
操作符
一元操作符
- 递增递减操作符
- 一元加和减
位操作符
- 位操作考虑32位即可 ,虽然ECMAScript中的所有值都以IEEE754 64位格式存储,但位操作并不直接应用64位,而是将值先转为32位
- 负数以二进制补码存储
- 按位非:~(对数值取反并减1)
- 按位与:&(将两个数的每一位对齐,然后每一位进行与操作)
- 按位或:|
- 按位异或:^
- 左移:<<
- 有符号右移:>>
- 无符号右移:>>>
布尔操作符
- 逻辑非:!
- 逻辑与:&&(短路特性)
- 逻辑或:||
乘性操作符
- 乘法操作符
- 除法操作符
指数操作符
- **, 也可以使用Math.pow()
- **=
add operator
- add: +
- sub: -
relationship operator
- >
- <
- >=
- <=
equal operator
- ==(only judge whether the value is equal)
- !=
- === (judge value as well as data type)
assignment operator
- =
- 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 | 阅读笔记的更多相关文章
- javascript高级程序设计第三章的一些笔记
[TOC] 1. 语法 1.1 区分大小写 变量.函数名和操作费都区分大小写. 1.2 标识符 标识符指变量.函数.属性的名字,或者函数的参数.标识符按以下规则组合: 第一个字符必须是一个字母,下划线 ...
- JavaScript高级程序设计 第三章 基本概念
ch3 基本概念 标签(空格分隔): JavaScript 语法 标识符 - 第一个字符必须是字母.下划线或美元 - 驼峰大小写格式 严格模式 ECMAScript5引入,定义了一种解析和执行模型.此 ...
- javascript高级程序设计第三章
看后总结: 1.区分大小写 2.标识符是有字母下划线$开头,并有字母.下划线.数字.美元符号组成. 3.建议用驼峰法命名标识符. 4.注释: 单行:// 多行: /* */ 5.严格模式: 在js ...
- Javascript高级程序设计 -- 第三章 -- 总结
1.Javascript有几种数据类型 2.变量 Javascript有几种数据类型 JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Nu ...
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- 《JavaScript高级程序设计》——第二章在HTML使用JavaScript
这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...
- JavaScript高级程序设计学习(三)之变量、作用域和内存问题
这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...
- JavaScript高级程序设计第三版-读书笔记(1-3章)
这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript 提供核心语言功能 DOM 提供访问 ...
- 《JavaScript高级程序设计第三版》——细碎知识痛点整理(第六章)
面向对象的程序设计 对象是一组没有特定顺序的值6.1.1 属性类型ECMAScript中有两种属性:数据属性和访问器属性.1. 数据属性Configurable 表示能否通过delete删除属性从而重 ...
- 读Javascript高级程序设计第三版第六章面向对象设计--创建对象
虽然Object构造函数或者对象字面量都可以用来创建单个对象,但是缺点非常明显:使用同一接口创建很多对象,会产生大量重复代码. 工厂模式 1 function CreatePerson(name,a ...
随机推荐
- 可观测|时序数据降采样在Prometheus实践复盘
简介: 基于 Prometheus 的监控实践中,尤其是在规模较大时,时序数据的存储与查询是其中非常关键,而且问题点较多的一环.如何应对大数据量下的长周期查询,原生的 Prometheus 体系并未能 ...
- 云原生微服务的下一站,微服务引擎 MSE 重磅升级
简介:管好微服务,成为云原生时代的新难题. 管好微服务,成为云原生时代的新难题. 从建好微服务到管好微服务,差的虽是一个字,连接起两边的却需要大量的微服务落地经验.因为软件架构的核心挑战是解决业务快 ...
- [FAQ] IDE: Goland 注释符后面添加空行
如图所示,Code Style 对应语言 Go 勾选上注释空行的选项. Refer:Goland官网 Goland下载 Link:https://www.cnblogs.com/farwish/p/1 ...
- WPF 已知问题 RadioButton 指定 GroupName 后关闭窗口可能导致无法选中
本文记录一个 WPF 已知问题,当 WPF 的 RadioButton 指定 GroupName 且将 IsChecked 状态绑定到 ViewModel 上,将包含以上控件的代码的窗口显示两个,接着 ...
- 2019-11-29-WPF-Process.Start-出现-Win32Exception-异常
title author date CreateTime categories WPF Process.Start 出现 Win32Exception 异常 lindexi 2019-11-29 10 ...
- k8s-1.28版本多master部署
一.环境准备 k8s集群角色 IP 主机名 安装相关组件 kubernetes版本号 控制节点 192.168.10.20 master apiserver.controller-manager.sc ...
- containerd基本使用命令
一.containerd简介 官 方 文 档 : https://containerd.io 在 2016 年 12 月 14 日,Docker 公司宣布将containerd 从 Docker 中分 ...
- vue-router设置页面切换滑动效果的方法及解决遇到的坑
先上gif:这里演示顺序是1232121 1.router.js中配置入口路由 { path: '/', redirect: '/index' } 2.main.js中new vu ...
- 八、Doris外部表及数据导入
DorisDB提供了多种导入方式,用户可以根据数据量大小.导入频率等要求选择最适合自己业务需求的导入方式. 数据导入: 1.离线数据导入:如果数据源是Hive/HDFS,推荐采用 Broker Lo ...
- ansible系列(21)--ansible的变量注册Register
1. 变量注册Register register 关键字可以将某个 task 任务结果存储至变量中,最后使用 debug模块 输出变量内容,可以用于后续排障: 示例一:register的基本使用: # ...