JavaScript 标准库

2017-09-14  本文已影响453人  Viaphlyn

参考基础教程的整理,方便记忆

一、Object对象 (O大写)

var a = ["Hello", "World"];

Object.keys(a)
// ["0", "1"]

Object.getOwnPropertyNames(a)
// ["0", "1", "length"]
var o = new Object();
o.valueOf() === o // true

二、Array 对象

var a = [1, 2, 3];

typeof a // "object"
Array.isArray(a) // true
//typeof运算符只能显示数组-的类型是Object,而Array.isArray方法可以对数组返回true。
var a = [];
a.push(1) 
//合并两个数组
var a = [1, 2, 3];
var b = [4, 5, 6];

Array.prototype.push.apply(a, b)
// 或者
a.push.apply(a, b)

// 等同于
a.push(4, 5, 6)

a // [1, 2, 3, 4, 5, 6]
var a = {a: 1};

[].push.call(a, 2);
a // {a:1, 0:2, length: 1}

[].push.call(a, [3]);
a // {a:1, 0:2, 1:[3], length: 2}
var a = [1, 2, 3, 4];

a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"

三、包装对象

var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);
//生成了三个对象,与原始值的类型不同。

typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"

v1 === 123 // false
v2 === 'abc' // false
v3 === true // false
new Number(123).valueOf()  // 123
new String("abc").valueOf() // "abc"
new Boolean("true").valueOf() // tru
'abc'.length // 3
//abc是一个字符串,本身不是对象,不能调用length属性。
//自动将其转为包装对象,调用length属性。
//调用结束后,这个临时对象就会被销毁。
//只读的,无法修改。字符串无法添加新属性。
'abc'.charAt === String.prototype.charAt
// true
new Number(123) + 123 // 246
new String('abc') + 'abc' // "abcabc"
if (new Boolean(false)) {
  console.log('true');
} // true
// false对应的包装对象实例是一个对象,进行逻辑运算时,
//被自动转化成布尔值true(所有对象对应的布尔值都是true)
if (new Boolean(false).valueOf()) {
  console.log('true');
} // 无输出
//实例的valueOf方法,则返回实例对应的原始值,本例为false。
if (Boolean(null)) {
  console.log('true');
} // 无输出

if (new Boolean(null)) {
  console.log('true');
} // true
//对于一些特殊值,Boolean对象前面加不加new
//会得到完全相反的结果

四、 Number对象

var n = new Number(1);
typeof n // "object"
(10).toString(2) // "1010"
(10).toString(8) // "12"
//前面的数值要加括号或加两个点(即理解为10.0.)
10..toString(2)
10 .toString(2) // "1010"
10.0.toString(2) // "1010"

五、String对象

new String("abc")
// String {0: "a", 1: "b", 2: "c", length: 3}
'a'.concat('b', 'c') // "abc"
//可以接受多个参数

六、Math对象

七、Date对象

Date()
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"
//可作为普通函数直接调用,返回一个代表当前时间的字符串。
Date(2000, 1, 1)
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"
//即使带有参数,Date作为普通函数使用时,返回的还是当前时间。
var today = new Date();
var today = new Date();

today
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"

// 等同于
today.toString()
// "Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"
//这个Date实例对应的字符串值,就是当前时间。
new Date(1378218728000)
// Tue Sep 03 2013 22:32:08 GMT+0800 (CST)

// 1970年1月2日的零时
var Jan02_1970 = new Date(3600 * 24 * 1000);
// Fri Jan 02 1970 08:00:00 GMT+0800 (CST)

// 1969年12月31日的零时
var Dec31_1969 = new Date(-3600 * 24 * 1000);
// Wed Dec 31 1969 08:00:00 GMT+0800 (CST)
//Date构造函数的参数可以是一个负数,表示1970年1月1日之前的时间。
new Date('January 6, 2013');
// Sun Jan 06 2013 00:00:00 GMT+0800 (CST)
//省略了小时、分钟或秒数会被设为0。
new Date(2013)
// Thu Jan 01 1970 08:00:02 GMT+0800 (CST)
//只有一个参数,2013被解释为毫秒数,而不是年份。
new Date(2013, 15)
// Tue Apr 01 2014 00:00:00 GMT+0800 (CST)
//这些参数如果超出了正常范围,会被自动折算。
new Date(2013, 0, -1)
// Sun Dec 30 2012 00:00:00 GMT+0800 (CST)
//参数还可以使用负数,表示扣去的时间。
new Date(1, 0)
// Tue Jan 01 1901 00:00:00 GMT+0800 (CST)

new Date(-1, 0)
// Fri Jan 01 -1 00:00:00 GMT+0800 (CST)
//年份如果是0到99,会自动加上1900。
//如果为负数,则表示公元前。
d1 = new Date(2000, 2, 1);
var d2 = new Date(2000, 3, 1);

d2 - d1
// 2678400000
//减法运算,返回的就是它们间隔的毫秒数
d2 + d1
// "Sat Apr 01 2000 00:00:00 GMT
//+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"
//加法运算,返回的就是连接后的两个字符串
Date.now() // 1364026285194
// 格式
Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]])

// 用法
Date.UTC(2011, 0, 1, 2, 3, 4, 567)
// 1293847384567
var d2 = new Date ('January 6, 2013');
d2.setDate(-1) // 1356796800000
d2 // Sun Dec 30 2012 00:00:00 GMT+0800 (CST)
//set*方法的参数都会自动折算
//参数超过当月的最大天数,向下一个月顺延
//参数是负数,从上个月的最后一天开始减去的天数。
var d = new Date();
d.valueOf() // 1362790014817
d.getTime() // 1362790014817

八、RegExp对象

var regex = /xyz/;
//使用字面量,以斜杠表示开始和结束。编译时新建正则表达式
var regex = new RegExp('xyz');
//使用 RegExp 构造函数。运行时新建正则表达式。
var regex = new RegExp('xyz', "i");
// 等价于
var regex = /xyz/i;
/cat/.test('cats and dogs') // true
'aaa'.replace('a', 'b') // "baa"
'aaa'.replace(/a/, 'b') // "baa"
//不加g修饰符,就替换第一个匹配成功的值
'aaa'.replace(/a/g, 'b') // "bbb"
//否则替换所有匹配成功的值。
// 非正则分隔
'a,  b,c, d'.split(',')
// [ 'a', '  b', 'c', ' d' ]

// 正则分隔,去除多余的空格
'a,  b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]

// 指定返回数组的最大成员
'a,  b,c, d'.split(/, */, 2)
[ 'a', 'b' ]

匹配规则

/c.t/
//c.t匹配c和t之间包含任意一个字符的情况
//只要这三个字符在同一行,比如cat、c2t、c-t等等,但是不匹配coot
/1+1/.test('1+1')
// false

/1\+1/.test('1+1')
// true
(new RegExp('1\+1')).test('1+1')
// false

(new RegExp('1\\+1')).test('1+1')
// true
var s = 'aaa';
s.match(/a+/) // ["aaa"]
//因为默认是贪婪模式,会一直匹配到字符a不出现为止,所以匹配结果是3个a
/fred+/.test('fredd') // true
//没有括号,结果+只表示重复字母d
/(fred)+/.test('fredfred') // true
//有括号,结果+就表示匹配“fred”这个词。
var m = 'abc'.match(/(?:.)b(.)/);
m // ["abc", "c"]
//第一个括号是非捕获组,所以最后返回的结果中没有第一个括号,只有第二个括号匹配的内容。
var m = 'abc'.match(/b(?=c)/);
m // ["b"]
//括号里的部分是不会返回的。

九、 JSON 格式

JSON.stringify(/foo/) // "{}"

十、console

Console面板(又称为控制台)

 console.log({f1: 'foo', f2: 'bar'})
// Object {f1: "foo", f2: "bar"}

console.dir({f1: 'foo', f2: 'bar'})
// Object
//   f1: "foo"
//   f2: "bar"
//   __proto__: Object
//显示dir方法的输出结果,比log方法更易读,信息也更丰富。
//该方法对于输出 DOM 对象非常有用,因为会显示 DOM 对象的所有属性。
console.dirxml([1, 2, 3])
// 等同于
console.dir([1, 2, 3])
//-如果参数不是 DOM 节点,而是普通的 JavaScript 对象,console.dirxml等同于console.dir。
console.assert(false, '判断条件不成立')
// Assertion failed: 判断条件不成立

// 相当于
try {
  if (false) {
    throw new Error('判断条件不成立');
  }
} catch(e) {
  console.error(e);
}

十一、属性描述对象

var o = { p: 'a' };

Object.getOwnPropertyDescriptor(o, 'p')
// Object { value: "a",
//   writable: true,
//   enumerable: true,
//   configurable: true
// }
var o = {};
o.p = 123;

o.propertyIsEnumerable('p') // true
o.propertyIsEnumerable('toString') // false
//用户自定义的p属性是可枚举的,而继承自原型对象的toString属性是不可枚举的。
上一篇 下一篇

猜你喜欢

热点阅读