JavaScript工具¶
标准库¶
Object¶
Object所有其他对象继承自Object
对象,所有对象都是Object
的实例。
Object()
¶
Object()
将任意值转换为对象,常用于保证某一个值一定是对象。
var obj = Object();
// 等同于
var obj = Object(null);
var obj = Object(undefined);
obj instanceof Object;
// 如果参数是原始类型,则将其转换为对应包装器的类型
var obj = Object('string');
obj instanceof Object;
obj instanceof String;
// 如果方法的参数为对象,则不进行转换
// 由此可写一个判断参数是否为对象的函数
function isObject(value) {
return value === Object(value);
}
isObject([]); // true
isObject(true); // false
Object()
可以作为构造函数使用
var obj = new Object();
// 等价于
var obj = {};
// 如果构造函数的参数是一个对象,则直接返回该对象
var o1 = { a: 1 };
var o2 = new Object(o1);
o1 === o2; // true
var obj = new Object(123);
obj instanceof Number; // true
Object的静态方法¶
指部署在Object对象自身的方法。
- 遍历对象自身的属性(而不是继承的属性),可枚举属性
Object.keys()
,还包括不可枚举属性的Object.getOwnPropertyNames()
- 对象属性模型相关方法 1.
Object.getOwnPropertyDescriptor()
获取某个属性的描述对象 2.Object.defineProperty()
通过描述对象定义属性 3.Object.defineProperties()
通过描述对象定义多个属性 - 控制对象状态的方法 1.
Object.preventExtensions()
防止对象被拓展 2.Object.isExtensible()
判断对象是否可拓展 3.Object.seal()
禁止对象配置 4.Object.isSealed()
判断对象是否可配置 5.Object.freeze()
冻结对象 6.Object.isFrozen()
判断对象是否被冻结 - 原型链相关方法
Object.create()
可以指定原型对象和属性,返回新的对象Object.getPrototypeOf()
获取对象的prototype对象
Object的实例方法¶
部署在Object.prototype
对象的方法。
Object.prototype.valueOf()
返回当前对象对应的值。Object.prototype.toString()
,Object.prototype.toLocaleString()
返回当前对象对应的字符串形式。 通过Object.prototype.toString()可以判断一个对象的类型Object.prototype.hasOwnProperty()
判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。Object.prototype.isPrototypeOf()
判断当前对象是否为另一个对象的原型对象Object.prototype.propertyIsEnumerable()
某个属性是否可枚举
属性描述对象 Atrributes Object¶
JavaScript内部用于描述属性的对象,用于控制对象属性的行为等。
属性描述对象的例子
{
value: 123,
writable: false, // 属性是否可改变
enumerable: true, // 若不可枚举则在一些操作中会被跳过,如 (for ... in)和Object.keys()
configurable: false, // 是否可删除该属性,是否可改变描述属性对象的值
get: undefined, // getter
set: undefined
}
var obj = { p: 'a' };
Object.getOwnPropertyDescriptor(obj, 'p');
Object.defineProperty(object, propertyName, attributesObject)
¶
为object定义属性,并返回对该object的引用。
var o = Object.defineProperty({}, 'p', {
value: 123,
writable: true,
enumerable: true,
configurable: true
});
Array对象¶
Array
既是原生对象,又是构造函数。
Array的构造函数¶
不同参数时行为不同。
- 无参数返回空数组。
- 单一数值参数返回指定长度的空数组;负值参数报错。
- 单一非数值参数,将该参数作为返回新数组的成员。
- 多参数,将参数作为返回数组的成员。
isArray()
¶
用于判定指定参数是否为数组,弥补typeof
的不足。
var arr = [1, 2, 3];
typeof arr; // object
Array.isArray();
Array的实例方法¶
valueOf()
,toString()
valueOf()
返回数组本身,toString()
返回数组的字符串形式。push()
,pop()
添加或弹出数组中的最后一个元素;对空数组使用pop()
将不报错而返回undefined
shift()
,unshift()
在数组的第一个位置删除或添加元素,此方法返回新的长度。join(separator = ',')
将数组的所有元素以指定分隔符连接为字符串。concat()
将参数数组的成员合并到原数组中;原数组不变,返回合并后的新数组。reverse()
颠倒原数组。slice(start, end)
提取目标数组的一部分,返回新数组,原数组不变。可以接受负数的参数。若没有参数,实际上时创建元素组的拷贝;因此可以借助此方法将类似数组的对象转换为真正的数组。splice(start, howmany, addElement1, addElement2, ...)
改变原素组 拼接;删除指定位置的元素,并将后续参数加入原数组。-
sort()
将数组元素进行排序。默认按字典序进行排序(注意数值将被转换为字符串再进行排序)。可以传入函数作为参数,按自定义方法进行排序。sort
自定义排序与C++ STL的sort()
返回值的意义相反,注意区分。[1, 2, 3].sort(function (cur, nxt) { return nxt > cur; // 若返回的数值大于0,则表示nxt的位置应排在cur前;否则均排在cur后面。 }); // [3, 2, 1]
-
map()
将数组的每一个成员依次传入参数函数,并将执行的结果合并成一个数组返回。forEach()
类似于map()
但是不获取返回值,仅仅用于操纵数据。这两种方法都会跳过数组中的空位,但不会跳过undefined
和null
。var out = []; [1, 2, 3].forEach(function (elem, index, arr) { this.push(2 * elem + index); }, out);
-
filter()
对每个元素执行filter中的函数,将函数返回结果为true
的元素组成新的数组,返回新的数组。[1, 2, 3].forEach(function (elem, index, arr) { return true; }, /* 可绑定函数中的this变量 */)
-
some()
,every()
对数组中的每个元素执行函数,若某些/每个元素的执行结果为true
,则返回true
。 reduce()
,reduceRight()
对数组中的每个元素执行函数,reduceRight()
从右往左执行,函数接受四个参数var arr = [1, 2, 3, 4, 5]; arr.reduce(function (prev /*积累变量,默认值为arr[0] */, cur /* 当前变量,默认为arr[1] */, index, arr) { return prev + cur; // 返回值作为下一次执行函数时的prev值 }); // 数组求和
reduce()
函数的第二个参数可对积累变量赋初始值,注意此时cur
变量为数组中的第一个元素。这里可以避免由于空数组无法取得初始值时出错。当没有初始值时,reduce
从索引1开始执行callback,否则,从索引0开始执行callback。 14.indexOf()
,lastIndexOf()
给出给定元素在数组中出现的位置,如果没有出现则返回-1
。第二个参数表示开始搜索的位置。 注意此方法不能用于搜索NaN
的位置,因为NaN
是唯一自身不等于自身的值。
Map
¶
let kv = [
['k1', 'v1'], ['k2', 'v2'], ['k3', 'v3']
]
let map = new Map(kv);
map.get('k4') // undefined
map.set('k4', 'v4')
包装对象¶
数值、字符串和布尔值有对应的包装对象Number
, String
和Boolean
。
自动转换生成的包装对象是只读的;自动转换调用完毕后包装对象会自动销毁。
可以在包装对象的原型上定义新的方法。
Number对象¶
具有一些有用的静态属性,如Number.MAX_SAFE_INTEGER
, Number.POSITIVE_INFINITY
有用的实例方法:
toString(不大于16的进制数)
toFixed(指定小数位数)
toExponential(小数位数)
toPrecision(指定位数的有效数字)
String对象¶
静态方法
fromCharCode(unicode1, unicode2, ...)
返回对应码点组成的字符串。码点大于0xFFFF的字符需要连续使用两次或以上此方法charCodeAt()
上述方法的逆方法trim()
去除字符串两端的空白字符,返回新字符串,不改变原字符串。toLowerCase()
,toUpperCase()
match()
,search()
,replace()
正则方法split()
使用指定分隔符分割字符串,返回包含分割字符串的属猪;如果未指定分隔符,则返回数组的唯一成员为原字符串;如果指定分隔符为空字符串,则返回数组成员为原字符串的每一个字符。
具有类似数组的方法。
注意到substring()
或substr()
与slice()
不同,会自动将参数中的负数转换为0,违反直觉。因此建议使用slice()
Math对象¶
不是构造函数,所有属性和方法都必须在Math对象上调用。
Date对象¶
- 直接调用 无论有没有参数,
Date()
都返回代表当前时间的字符串 - 构造函数用法 1. 可以被
Date.parse()
解析的字符串都可以作为字符串参数 2. 单一数值为毫秒数 3.new Date(year, month, day, hour, minute, second, microsecond0~999)
参数可以使用0和负数;注意月份从0开始计算,但天数从1开始计算
注意日期的直接运算,相加为字符串的拼接,相减为毫秒数的相差(参考自动类型转换)
静态方法
Date.now()
当前时间的毫秒数。Date.parse()
通常是YYYY-MM-DDTHH:mm:ss.sssZ
格式,最后的Z表示时区;其他格式也能被解析。解析成功返回毫秒数,解析失败返回NaN
Date.UTC()
将参数当成UTC时间进行解释。其他与Date构造函数相同。
实例方法
toString
,toISOString
(等价于toJSON
)toDateString
,toTimeString
getDate()
等setDate()
等
JSON对象¶
对值的类型和格式有严格的规定
复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和
null
(不能使用NaN
,Infinity
,-Infinity
和undefined
)。字符串必须使用双引号表示,不能使用单引号。
对象的键名必须放在双引号里面。
数组或对象最后一个成员的后面,不能加逗号。
JSON.stringnify()
可接受第二个参数(数组或函数)定制输出内容,第三个参数(字符串)定制缩进字符。JSON.parse()
RegExp对象¶
仿照Perl 5体系的正则表达式。
var reg1 = /reg/igm // 字面值
var reg2 = new RegExp('reg', 'igm'); // 对象形式
RegExp的实例属性¶
- 只读 - 与修饰符相关的
RegExp.prototype.ignoreCase
,global
,multiline
。 - 返回正则表达式的字符串形式RegExp.prototype.source
。 - 可写 下一次搜索时开始的位置,
RegExp.prototype.lastIndex
,只在进行连续搜索时有意义。
RegExp的实例方法¶
test
当前模式是否能匹配参数字符串。exec
返回匹配字符串。
Chapter 7+ 文档对象模型DOM¶
节点Node¶
DOM的最小组成单位,包括7种:
- Document 文档根节点
- DocumentType doctype标签
- Element html标签
- Attribute 元素属性
- Text 标签之间或标签包含的文本
- Comment 注释
- DocumentFragment 文档片段
以上7种节点继承自Node对象
节点树¶
document
节点代表整个文档
节点之间的关系:父节点、子节点、同级节点。
Node接口¶
NodeList接口和HTMLCollection接口¶
ParentNode接口和ChildNode接口¶
属性的操作¶
getAttribute()
,getAttributeNames()
setAttribute()
hasAttribute()
,hasAttributes()
removeAttribute()
Canvas¶
绘图上下文¶
ctx = canvas.getContext('2d');
绘制图形¶
绘制矩形
fillRect(x, y, width, height);
strokeRect(x, y, width, height);
clearRect(x, y, width, height);
绘制路径
beginPath()
moveTo(x, y)
lineTo(x, y)
closePath()
storke()
,fill()
URLSearchParams¶
构造、解析和处理URL的查询字符串。