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 ...
随机推荐
- EventBridge 在 SaaS 企业集成领域的探索与实践
简介: 当下降本增效是各行各业的主题,而 SaaS 应用作为更快触达和服务业务场景的方式则被更多企业熟知和采用.本文将结合实际业务场景讲述在 SaaS 行业的洞察与 SaaS 集成的探索实践. 作者: ...
- 数据的“敏捷制造”,DataWorks一站式数据开发治理范式演进
简介: 企业大数据技术发展至今,历经了两次蜕变.第一次蜕变从最初的"小作坊"解决大数据问题,到后来企业用各类大数据技术搭建起属于自己的"大平台",通过平台化的能 ...
- [Caddy2] URL访问路径的重定向和重写规则 (redir/rewrite 指令)
当我们在规划网站路径时,为了保留搜索引擎收录 避免404的同时做到升级,常用到重定向跳转和URL重写. 重定向(redirect) 在 Caddy 中为 redir 指令. https://caddy ...
- K8s包管理工具Helm v3(19)
一.Helm概述 官网:https://v3.helm.sh/zh/docs/ https://helm.sh/ helm 官方的 chart 站点: https://hub.kubeapps.com ...
- SpringBoot使用JSch操作Linux
推荐使用Hutool的Jsch工具包(它用的连接池的技术) 一.SSH远程连接服务器 SSH更多见:http://t.csdnimg.cn/PrsNv 推荐连接工具:FinalShell.Xshell ...
- ChatGPT开源项目精选合集
大家好,我是 Java陈序员. 2023年,ChatGPT 的爆火无疑是最值得关注的事件之一,AI对话.AI绘图等工具层出不穷. 今天给大家介绍几个 ChatGPT 的开源项目! 关注微信公众号:[J ...
- VUE+element页面按钮调用dialog
VUE+element通过按钮调用普通弹框(弹框页面独立出一个dialog页面,非在同一个页面文件里) 代码如下 <el-dialog> <el-button type=" ...
- .Net 8.0 下的新RPC,IceRPC之使用Dev Containers进行 .NET QUIC 精简开发
作者引言 很高兴啊,我们来到了IceRPC之使用Dev Containers进行 .NET QUIC 精简开发,主要是一篇指引,如何使用开发容器做为开发环境,进行开发IceRPC,可适用于任务应用的开 ...
- 网络协议分析与抓包 TCP/IP UDP等
学习地址: https://www.bilibili.com/video/BV1hV411U74y?p=4 https://www.bilibili.com/video/BV1S7411R7kF?p= ...
- cesium教程6-用entity绘制点线面label和billboard广告牌
注意:billboard显示的图片是立体的,会跟随角度而变化的. pinBuilder.fromText()用于创建自定义地图图钉 完整示例代码: <!DOCTYPE html> < ...