第一章
主要介绍的是js的相关背景和介绍(我这里就不做缀述)
第二章
1.空白
通常空白是无意义的,但是有时候必须要用来分隔字符。 /**/ 注释不够安全,建议使用//
2.标识符
由字母开头,具选择性的加入一个或者多个字母下划线。
js中不能使用保留字作为对象的属性名
下划线 -- my_name
驼峰 -- MyName
3.数字
在js中没有分离整数只有一个64位的数字类型,所以在js中完美的避免了短整型溢出的问题。
NaN作为一个不能正常运行的结果,可以使用isNaN(number)来检测,NaN不等于任何值包括它本身。
Infinity表示所有大于1.797693134862316E+308的值
Number 对象
精度:
八进制和十六进制 前缀为0则代表8进制数。前缀为x则是16进制。
转换进制 toSting(8)
a.toSting(8)
a.toSting(16)
无穷大:正无穷大Infinity,负无穷大-Infinity
NaN:非数值的特殊值-isNaN()
方法:
parseFloat() 将字符串转成浮点数
parselnt() 将字符串转成整数
isFinite() 判断传入的参数是否为有限数字
isInteger() 判断传入的参数是否为整数
isNaN() 判断传递的参数是否为NaN
isSafeInteger() 判断传递的参数是否为安全整数 --- 安全整数?
toExponential() 返回一个数字的指数形式的字符串---
const num = 77.445576
num.toExponential()
toFixed() 返回指定小数位数的标识形式
const a = 123;
cosnt b = a.toFixed(2)
// b:'123.00'
const a = 123.7545
cosnt b = a.toFixed(2)
// b:'123.76' //四色五入
toPrecision() 返回一个指定精度的数字
const a = 123
const b = a.toPrecision(2)
// b: '1.2e + 2'
可以使用math.floor(number)把一个数字转换成整数
4.字符串
js的所有字符串都是16位的,被包裹在单引号或者双引号之间。
通过length 获取字符串长度
charAt() 返回指定索引位置的字符
charCodeAt() 返回指定索引位置的Unicode值
split() 把字符串分割成数组
substr() 从起始索引提取字符串中指定数目的字符(区别)
substring() 提取字符串中两个指定的索引号之间的字符
trim() 移除字符串首尾空白
...字符串其他的方法()
转义字符串把一些正常无法插入到字符串中的字符插入到字符串中。
两个包含了相同字符且顺序相同的字符串被认为是同一个字符串如: 'a'+'b'+'c' = 'abc'
5.语句
script提供了一个被编译且立即执行的编译单元,js把它们抛到一个公共的全局名空间中。
执行顺序通常是从上至下的,但是可以通过(if和switch)循环(while,for和do)返回(break,return和throw)来改变顺序
for in 会枚举一个对象的所有属性,在每次循环之后,object的下的一个属性名字符串被赋值给varible 通常需要使用object,hasownproperty(varible)来确定这个属性名是否属于该对象,还是来自原型链
do while至少会执行一次
6.表达式
一个中置运算符和一个表达式,三元表达式,属性提取表达式
typeof
instanceOf
7.字面量
一种方便按指定规格规范创建新对象的表示法
8.函数
可以有一个可选的名字,可递归自己,可以指定参数列表在调用时传递实际参数(argument)
第三章对象
对象是可变的键控集合,在js中数组是对象,函数是对象,正则表达式是对象,对象也是对象
对象是属性的容器,其中每个属性都拥有名字和值,属性的名字可以是包括空字符串在内的任意字符串,属性值可以是除undefined值以外的任意值。
对象包含原型链的特性,允许对象继承另一个对象的属性,正确的使用它能减少对象初始化时的消耗和内存。
1.对象字面量
对象字面量提供了一种非常方便的创建新对象的表示法,一个对象字面量就是包围在一对花括号中的零或者多个"名/值"对。对象字面量可以出现在任意表达式出现的地方。
2.检索
要检索对象里面包含的值,可以采用[ ]后缀中括住一个字符串的表达式的方式,如果字符串表达式是一个字符串的字面量,而且它是一个合法的js标识符且不是保留字。那么也可以用.表示法代替。
stooge["frist-name"]
stooge.frist
当你检索的值不存在的时候,会返回undefined
3.更新
对象里面的值可以通过赋值来更新。如果属性名已经存在于对象中,这个属性值会被替换。如果对象之前没这个属性值,就会扩充到对象中。
4.引用
对象通过引用来传递。它们永远不会被复制。
var x = stooge;
x.nickname = 'Curly'
// 因为x和stooge是指向同一个对象的引用,所以nick为'Curly'
var nick = stooge.nickname;
// a,b,c每个都引用一个不同的空对象。
var a = {},b = {},c = {};
// a,b,c都引用同一个空对象。
a = b = c = {};
5.原型
每个对象都连接一个原型对象,并且可以从中继承属性。所有通过对象字面量创建的对象都连接object.prototype,它是js中的标配对象。
当你创建一个对象的时候,你可以选择某个对象作为它的原型。js提供了实现机制杂乱而复杂。但是可以明显简化。
if(typeof object.beget !== 'function'){
object.create = function(o);
var F = function() {};
F.prototype = o;
return new F();
}
var another_stooge = object.create(stooge);
原型连接在更新的时候是不起作用的。当我们对某个对象做出改变的时候,不会触及到对象的原型。
原型连接值在索引值的时候才被用到。如果我们尝试去获取对象的某个属性值,但是该对象没有这个属性名,那么js就会试着从原型对象中去获取属性值,如果这个原型对象也没有这个属性。那么它会再从它的原型中新寻找,直到该过程最后达到终点。object.prototype如果想要的属性完全不存在于原型链中,那么结果就是undefined。这个过程称之为委托。
原型关系是一个动态的关系。如果我们添加一个新的属性到原型中,该属性会立即对所有基于该原型创建的对象可见。
6.反射
obj.hasOwnProperty()
用来检测一个对象是否含有特定的自身属性
会忽略掉那些从原型链上继承的属性
7.删除
delete运算符
原型链中的任何对象
8.减少全局污染
var引发的全局变量污染
第四章 函数
1.函数对象
函数是对象,对象是名/值的集合并且拥有一个连接到原型对象的隐藏连接,对象隐藏连接到object.prototype。而函数连接到function.prototype中(该原型对象连接object.prototype上。
每个函数在创建时会附加两个隐藏属性:函数上下文和实现函数行为的代码。
每个函数对象在创建时也随配有一个prototype属性,它的值是一个拥有comstructor属性且值即为该函数的对象。函数可以拥有方法,函数与众不同之处它们可以被调用。
2.函数字面量
可以通过嵌套到其他夫函数的参数和变量,通过函数字面量创建的函数对象包含一个连接到外部上下文的连接。这被称为闭包。
3.调用
四种调用方式 方法调用模式 函数调用模式 构造器调用模式 apply调用模式