本章节最终要的知识点是内存图
数据类型
- 七种数据类型(请背诵): number string boolean symbol - - -undefined null object
- 注意没有 array 类型也没有 function 类型。
- number
整数和小数:1 1.1 .1
科学记数法:1.23e2
二进制:0b11
八进制:011(后来 ES5 添加了 0o11 语法)
十六进制:0x11 - string
空字符串:''
多行字符串: var s = '12345' +
'67890' - symbol
方应杭:JS 中的 Symbol 是什么?
(规范)如果一个变量没有被赋值,那么这个变量的值就是 undefiend
(习俗)如果你想表示一个还没赋值的对象,就用 null。如果你想表示一个还没赋值的字符串/数字/布尔/symbol,就用 undefined(但是实际上你直接 var xxx 一下就行了,不用写 var xxx = undefined)
object
object 就是上面几种基本类型(无序地)组合在一起
object 里面可以有 object
var person = {
name: 'Frank',
'child': {
name: 'Jack'
}, // 最后这个逗号可有可无
}
object 的 key 一律是字符串,不存在其他类型的 key
object[''] 是合法的
object['key'] 可以写作 object.key
注意 object.key 与 object[key] 不同
delete object['key']
'key' in object
类型转换
- 其他类型转换成字符串类型,可以通过toString或者String()来实现.但是老程序员都是用+''(通过+运算符加上空字符串)
- 其他类型转换成布尔类型,只有特定的6个(空字符串,null,undefined,0,false,NAN)转为false,其他都转为true
- 其他类型转布尔类型,一般通过boolean(),但是老程序员使用!!双重取反的形式,例如!!0 结果为false
内存常识
- 电脑是通过电流控制0和1,所以内存运行的时候需要一直充电.电脑的开机就是把硬盘里面的东西放在内存上去运行.
- 操作系统占2G左右的内存,浏览器占1G左右内存,JavaScript引擎占100M左右
- 简单类型值放在stack 复杂类型放在 heap
- JavaScript没有指针,指针概念是C语言的,在JavaScript中是一种虚拟示意,可以说成引用.
垃圾回收核心理念:如果一个对象没有被引用他就是垃圾,将会被回收.什么时候回收是由浏览器决定
- 内存泄漏指的是:原本应该被回收的垃圾没有回收.这样就使得部分内存被永久占用,日积月累,浏览器吃的内存越来越多.
深拷贝
- 深拷贝就是A的改动,不影响B
- 基本类型,简单的赋值就是深拷贝,侧重点在于复杂类型的深拷贝.
以下是一些关于理解内存图的案例
var a = {'name':fang}
var b = a; //对象赋值是复制地址
b=null; // 这里的null是把b的地址改为null不影响 指引的对象,所以结果为fang
求a.name ? 答案输出:fang
var a ={};
a.self = a;
求a的值,结果为undefined
课后作业笔记
var name = 'x'
var obj = {
name: 'frank'
}
obj['name'] obj.name这两个答案都是'frank'
obj[name] 答案是undefined
- 我想知道变量 a 是否已经声明过(值为 undefined 不代表没有声明过),应该用代码 if ('a' in window) { ... }
- for...in 循环用来遍历对象
- for...in 循环会跳过不可遍历的 key
- for…in 循环不仅遍历对象自身的属性,还遍历继承的属性
- with语句的一个很大的弊病就是绑定对象不明确。建议尽量不要使用with语句.但是在某些特殊需求下,with 还是有用的.