Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

高级程序设计(红宝书)学习记录 #19

Open
yangxy6 opened this issue Jul 26, 2019 · 0 comments
Open

高级程序设计(红宝书)学习记录 #19

yangxy6 opened this issue Jul 26, 2019 · 0 comments

Comments

@yangxy6
Copy link
Owner

yangxy6 commented Jul 26, 2019

第一章 javascript

JavaScript 实现

  • 核心(ECMAScript):与 web 浏览器没有依赖关系,web 浏览器只是宿主之一,还包括 Node 宿主等。
  • 文档对象类型(DOM):将整个页面映射为树形节点结构。
  • 浏览器对象类型(BOM):提供与浏览器交互方法和接口

DOM 级别

DOM 并不是针对 JavaScript 的,也有其他语言实现 DOM,在浏览器中,基于 ECMASript 实现 DOM 已经成为 JavaScript 重要组成部分。

  • DOM0: 标准不存在,指的是最初支持 DHTML
  • DOM1:映射文档结构
  • DOM2:扩充了鼠标和用户界面事件,范围、遍历,增加 CSS 支持
  • DOM3:支持 XML1.0 规范

BOM

  • 浏览器窗口
  • 浏览器 navigator 对象
  • 浏览器加载页面详细信息 location 对象
  • 用户显示器分辨率 screen 对象
  • cookies

第二章 在 HTML 中使用 JavaScript

script 元素

六个属性

  • async:可选,表示立即下载脚本,但是不妨碍页面中其他操作,比如下载其他资源或者等待加载其他脚本。只对外部脚本文件生效。多个外部脚本时延迟时,延迟脚本不一定会按照顺序执行
  • defer:可选,表示脚本延迟到文档完全解析和显示之后执行。只对外部脚本文件有效。多个外部脚本时延迟时,延迟脚本会按照顺序执行
  • charset:可选,代码字符集
  • src:可选,表示要执行代码的外部文件。可以指向除了当前 HTML 页面所在域以外的域的完整 URL
  • type:可选,表示编写代码使用的脚本内容的内容类型(MIME 类型)。默认 text/javascript。
    async 和 defer 属性的脚本要确保两者之间互不依赖。

第三章 基本概念

3.1 语法

  • 区分大小写
  • 语句也分号结尾
  • if 语句始终使用代码块

3.2 变量

变量是松散类型,即可以用来保存任何类型的数据。

3.4 数据类型

五种基本数据类型

  • Undefined:声明变量但是未赋值或者未声明变量

  • Null:逻辑角度看,表示一个空对象指针。当对象将用于保存对象时,明确变量初始化 null,可以体现 null 作为空对象指针惯例,也能区分 null 和 undefined。

  • Boolean:true 和 false

  • String

  • Number

    一种复杂类型——object

typeof 操作符

typeof undefined // undefined
typeof null // object 语言bug
typeof true // boolean

Boolean 类型 转换规则

数据类型 转换 true 转换 false
String 非空字符串 ''
Numer 非 0 数字(包括无穷大) 0 和 NaN
Object 任何对象 null
Undefined undefined

Number

  • 八进制第一位必须是 0,然后是八进制序列(0-7),如果字面值中的数值超过了范围,那么 0 将会忽略,整体当做十进制解析
  • 进行算数计算时,所有八进制和十六进制表示的数值将转换为十进制进行计算。
  • 浮点数值计算精度丢失,可以乘以倍数转换为整数计算后在除以倍数。
  • 数值范围:Number.MIN_VALUE——Number.MAX_VALUE,可以使用 isFinite()函数判断。
  • NaN:不等于任何值包括 NaN 本身,通过 isNaN()方法判断。
let num = 070 // 八进制56
let num = 080 //无效的八进制,解析十进制为80

Number()数值转换

  • boolean:true->1 false->0
  • 数字:直接返回
  • null:0
  • undefined:NaN
  • 字符串:
    • 只包含数字,转换十进制数值,前导 0 会忽略
    • 浮点格式,转换浮点 shu 值,前导 0 忽略
    • 包含有效十六进制格式,例如'0xf',转化相同大小的十进制数值
    • 空字符串,返回 0
    • 包含除上述格式以外格式,返回 NaN
  • 对象:调用对象的 valueof(),依照前面的规则转换返回值。如果转换的结果是 NaN,则调用对象的 toString()方法,再次依照前面规则转换为字符串值。

parseInt(数值,基数)

  • parseInt()方法有两个参数,第二个参数代表使用的基数即进制。
  • 在转换字符串时会忽略空格,直到解析到非有效的数字字符。
  • 基数是 0 时,忽略,以 10 为基础解析
parseInt('22.2') // 22,小数点不是有点的数字字符
['1','2','3'].map(parseInt) // [1,NaN,NaN]
// map函数每个传给parseInt函数都是(value,index,arr)
// 即parserInt('1',0,['1','2','3']),parserInt('2',1,['1','2','3']),parserInt('3',2,['1','2','3'])
// parse('1',0)->1,parse('2',1)->NaN(进制基数不符合),parse('3',2)->NaN(有二进制,但是3不能被解析为二进制)

parseFloat(数值)

  • 字符串中第一个小数点是有效的,第二个无效
  • 可以识别所有浮点数值格式,但是只解析十进制值,所以只有一个参数

Object

每个实例都具有下列属性和方法

  • constructor:保存着用于创建当前对象的函数。
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在原型实例中)是否存在。参数属性名(propertyName)必须以字符串形式。
  • isProtptypeOf(object):用于检查传入的对象是否是当前对象的原型。
  • propertyIsEnumerable(proppertyName):用于检查给定的属性是否能够使用 for-in 语句枚举。参数属性名(propertyName)必须以字符串形式。
  • toString():返回对象的字符串表示。
let obj = {}
obj.toString() // "[object Object]"
  • valueOf():返回对象的字符串、数值或者布尔值表示。通常和 tostring()返回值相同。

3.5 操作符

一元操作符

  • 递增和递减:
    • 前置:++age,变量值在语句被求值前改变
    • 后置:age++,变量在语句被求值之后执行
  • 一元加和减操作:+、-

位操作符

  • 按位非(~): 返回数值的反码。本质就是操作数的负值-1。
  • 按位与(&):本质上讲两个数值的每一位对齐。每一位都是 1 时才返回 1,任何一位是 0,结果都是 0。
  • 按位或(|):有一个是 1 就返回 1,都是 0 才返回 0。
  • 按位异或(^):只有一个 1 才返回 1,都是 1 和 0 返回 0。
  • 左移(<<):二进制码左移指定的位数。不影响符号位。
  • 右移(>>):二进制码右移指定的位数。不影响符号位。

布尔操作符

  • 逻辑非(!)
  • 逻辑与(&&)
  • 逻辑或(||)

乘性操作符

非数值情况下会调用 Number()转换为数值。

  • 乘法(*)
  • 除法(/)
  • 求模(%)

加性操作符

加法(+)

  • 两边都是数值:执行常规操作
  • 有一个是字符串:
    • 都是字符串:拼接
    • 只有一个是字符串:另一个转换为字符串,然后拼接
  • 有一个是对象、数值、布尔值,则调用它们的 toString()方法取得相应的字符串值,在应用字符串规则。
  • undefined 和 null:分别调用 String()函数并取得字符串'i=undefined'和'null'。

减法(-)

  • 两边都是数值:常规操作
  • 有一个是字符串、布尔值、undefined 和 null 则调用它们的 Number()方法取得相应的数值。
  • 有一个是对象,则调用它们的 valueOf()方法取得表示该对象的数值。如果没有 valueOf()方法,则调用 toString()并将得到的字符串转换为数值。

关系操作符

小于(<)、大于(>)、大于等于(>=)、小于等于(<=)

  • 两边都是数值,数值比较。
  • 两边都是字符串,比较对应的字符编码值。
  • 一个是数值,另一个进行转换为数值。
  • 如果一个是对象,调用 valueOf()方法,没有则调用 toString()方法。
  • 一个是布尔值,转换为数值。
'23' < '3 // true -> 3的编码值>2的编码值
'B' > 'a' // true -> 大写字符的编码值大于小写字母

相等操作符

相等和不相等(==)(!=)——强制转型

  • null 和 undefined 是相等的。
  • 比较相等性之前,null 和 undefined 不能转化为其他值。
  • 如果两个操作数都是对象,则比较是不是同一个对象,如果指向同一个对象,则==返回 true。

全等和不全等——不转换类型

=== 和 !==

条件操作符(三目)

赋值操作符(=)

3.6 语句

  • if
  • do-while
  • while
  • for-in:可以用来枚举对象的属性。
  • with:不建议使用
  • switch

3.7 函数

函数参数由数组保存,在函数体内部可以通过 arguments 对象来访问这个参数数组。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant