美文网首页我爱编程
JavaScript的标准库

JavaScript的标准库

作者: 庄海鑫 | 来源:发表于2018-05-14 15:45 被阅读0次

    1. Object对象

    静态方法

    所谓“静态方法”,是指部署在Object对象自身的方法。

    • Object.keys()
    var obj={
      p1:123,
      p2:456
    };
    Object.keys(obj)  //["p1","p2"]
    
    • Object.getOwnPropertyNames(obj)
    var obj = {
      p1: 123,
      p2: 456
    };
    
    Object.getOwnPropertyNames(obj) // ["p1", "p2"]
    

    Object.keys()和Object.getOwnPropertyNames(obj)的区别

    var a = ['Hello', 'World'];
    
    Object.keys(a) // ["0", "1"]  只返回可枚举的属性
    Object.getOwnPropertyNames(a) // ["0", "1", "length"]  返回不可枚举的属性
    
    • 对象属性模型的相关方法
      • Object.getOwnPropertyDescriptor():获取某个属性的描述对象。
      • Object.defineProperty():通过描述对象,定义某个属性。
      • Object.defineProperties():通过描述对象,定义多个属性。
    • 控制对象状态的方法
      • Object.preventExtensions():防止对象扩展。
      • Object.isExtensible():判断对象是否可扩展。
      • Object.seal():禁止对象配置。
      • Object.isSealed():判断一个对象是否可配置。
      • Object.freeze():冻结一个对象。
      • Object.isFrozen():判断一个对象是否被冻结。
    • 原型链相关方法
      • Object.create():该方法可以指定原型对象和属性,返回一个新的对象。
      • Object.getPrototypeOf():获取对象的Prototype对象。

    Object 的实例方法

    除了静态方法,还有不少方法定义在Object.prototype对象。它们称为实例方法,所有Object的实例对象都继承了这些方法。

    • Object.prototype.valueOf():返回当前对象对应的值。
    • Object.prototype.toString():返回当前对象对应的字符串形式。
    • Object.prototype.toLocaleString():返回当前对象对应的本地字符串形式。
    • Object.prototype.hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。
    • Object.prototype.isPrototypeOf():判断当前对象是否为另一个对象的原型。
    • Object.prototype.propertyIsEnumerable():判断某个属性是否可枚举。

    2. Array对象

    静态方法

    • Array.isArray()
    var arr = [1, 2, 3];
    
    typeof arr // "object"
    Array.isArray(arr) // true
    

    实例方法

    • valueOf()
    • toString()
    • push()
    var arr = [];
    
    arr.push(1) // 1
    arr.push('a') // 2
    arr.push(true, {}) // 4
    arr // [1, 'a', true, {}]
    
    • pop()
    var arr = ['a', 'b', 'c'];
    
    arr.pop() // 'c'
    arr // ['a', 'b']
    
    • shift()
    var a = ['a', 'b', 'c'];
    
    a.shift() // 'a'
    a // ['b', 'c']
    
    • unshift()
    var a = ['a', 'b', 'c'];
    
    a.unshift('x'); // 4
    a // ['x', 'a', 'b', 'c']
    
    • join()
    var a = [1, 2, 3, 4];
    
    a.join(' ') // '1 2 3 4'
    a.join(' | ') // "1 | 2 | 3 | 4"
    a.join() // "1,2,3,4"
    
    
    [undefined, null].join('#')
    // '#'
    
    ['a',, 'b'].join('-')
    // 'a--b'
    
    • concat() (相当于浅拷贝,复制引用)
    ['hello'].concat(['world'])
    // ["hello", "world"]
    
    ['hello'].concat(['world'], ['!'])
    // ["hello", "world", "!"]
    
    [].concat({a: 1}, {b: 2})
    // [{ a: 1 }, { b: 2 }]
    
    [2].concat({a: 1})
    // [2, {a: 1}]
    
    • reverse()
    var a = ['a', 'b', 'c'];
    
    a.reverse() // ["c", "b", "a"]
    a // ["c", "b", "a"]
    
    • slice()
    arr.slice(start, end);
    
    var a = ['a', 'b', 'c'];
    
    a.slice(0) // ["a", "b", "c"]
    a.slice(1) // ["b", "c"]
    a.slice(1, 2) // ["b"]
    a.slice(2, 6) // ["c"]
    a.slice() // ["a", "b", "c"]
    
    • splice()
    arr.splice(start, count, addElement1, addElement2, ...);
    
    var a = ['a', 'b', 'c', 'd', 'e', 'f'];
    a.splice(4, 2) // ["e", "f"]
    a // ["a", "b", "c", "d"]
    
    var a = ['a', 'b', 'c', 'd', 'e', 'f'];
    a.splice(4, 2, 1, 2) // ["e", "f"]
    a // ["a", "b", "c", "d", 1, 2]
    
    • sort()
    [10111, 1101, 111].sort(function (a, b) {
      return a - b;
    })
    
    [
      { name: "张三", age: 30 },
      { name: "李四", age: 24 },
      { name: "王五", age: 28  }
    ].sort(function (o1, o2) {
      return o1.age - o2.age;
    })
    // [
    //   { name: "李四", age: 24 },
    //   { name: "王五", age: 28  },
    //   { name: "张三", age: 30 }
    // ]
    
    • map()
    var numbers = [1, 2, 3];
    
    numbers.map(function (n) {
      return n + 1;
    });
    // [2, 3, 4]
    
    numbers
    // [1, 2, 3]
    
    
    [1, 2, 3].map(function(elem, index, arr) {
      return elem * index;
    });
    // [0, 2, 6]
    
    • forEach()
    function log(element, index, array) {
      console.log('[' + index + '] = ' + element);
    }
    
    [2, 5, 9].forEach(log);
    // [0] = 2
    // [1] = 5
    // [2] = 9
    
    • filter()
    [1, 2, 3, 4, 5].filter(function (elem, index, arr) {
      return index % 2 === 0;
    });
    // [1, 3, 5]
    
    • some()
    var arr = [1, 2, 3, 4, 5];
    arr.some(function (elem, index, arr) {
      return elem >= 3;
    });
    // true
    
    • every()
    var arr = [1, 2, 3, 4, 5];
    arr.every(function (elem, index, arr) {
      return elem >= 3;
    });
    // false
    
    • reduce()
    [1, 2, 3, 4, 5].reduce(function (a, b) {
      console.log(a, b);
      return a + b;
    })
    // 1 2
    // 3 3
    // 6 4
    // 10 5
    //最后结果:15
    
    • reduceRight()
    reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。
    
    • indexOf()
    • lastIndexOf()

    3. Boolean 对象

    4. Number对象

    实例方法

    • Number.prototype.toString()
    • Number.prototype.toFixed()
    toFixed方法先将一个数转为指定位数的小数,然后返回这个小数对应的字符串。
    
    (10).toFixed(2) // "10.00"
    10.005.toFixed(2) // "10.01
    
    • Number.prototype.toExponential()
    toExponential方法用于将一个数转为科学计数法形式。
    
    (10).toExponential()  // "1e+1"
    (10).toExponential(1) // "1.0e+1"
    (10).toExponential(2) // "1.00e+1"
    
    (1234).toExponential()  // "1.234e+3"
    (1234).toExponential(1) // "1.2e+3"
    (1234).toExponential(2) // "1.23e+3"
    toExponential方法的参数是小数点后有效数字的位数,范围为0到20,超出这个范围,会抛出一个 RangeError 错误。
    
    • Number.prototype.toPrecision()
    
    toPrecision方法用于将一个数转为指定位数的有效数字。
    
    (12.34).toPrecision(1) // "1e+1"
    (12.34).toPrecision(2) // "12"
    (12.34).toPrecision(3) // "12.3"
    (12.34).toPrecision(4) // "12.34"
    (12.34).toPrecision(5) // "12.340"
    toPrecision方法的参数为有效数字的位数,范围是1到21,超出这个范围会抛出 RangeError 错误。
    
    toPrecision方法用于四舍五入时不太可靠,跟浮点数不是精确储存有关。
    

    5. String对象

    静态方法

    • String.fromCharCode()
    String.fromCharCode() // ""
    String.fromCharCode(97) // "a"
    String.fromCharCode(104, 101, 108, 108, 111)
    // "hello"
    

    实例属性

    • String.prototype.length

    实例方法

    • String.prototype.charAt()
    var s = new String('abc');
    
    s.charAt(1) // "b"
    s.charAt(s.length - 1) // "c"
    
    • String.prototype.charCodeAt()
    'abc'.charCodeAt(1) // 98
    
    • String.prototype.concat()
    var s1 = 'abc';
    var s2 = 'def';
    
    s1.concat(s2) // "abcdef"
    s1 // "abc"
    
    
    var one = 1;
    var two = 2;
    var three = '3';
    
    ''.concat(one, two, three) // "123"
    one + two + three // "33"
    
    • String.prototype.slice()
    'JavaScript'.slice(0, 4) // "Java"
    
    'JavaScript'.slice(4) 
    
    • String.prototype.substring()
    'JavaScript'.substring(0, 4) // "Java"
    
    'JavaScript'.substring(4) // "Script"
    
    'JavaScript'.substring(10, 4) // "Script"
    // 等同于
    'JavaScript'.substring(4, 10) // "Script"
    
    • String.prototype.substr()
    'JavaScript'.substr(4, 6) // "Script"
    
    • String.prototype.indexOf()
    • String.prototype.lastIndexOf()
    • String.prototype.trim()
    '  hello world  '.trim()
    // "hello world"
    
    • String.prototype.toLowerCase()
    • String.prototype.toUpperCase()
    • String.prototype.match()
    'cat, bat, sat, fat'.match('at') // ["at"]
    'cat, bat, sat, fat'.match('xt') // null
    
    //返回的数组还有index属性和input属性,分别表示匹配字符串开始的位置和原始字符串。
    var matches = 'cat, bat, sat, fat'.match('at');
    matches.index // 1
    matches.input // "cat, bat, sat, fat"
    
    • String.prototype.search()
    'cat, bat, sat, fat'.search('at') // 1
    
    • String.prototype.replace()
    'aaa'.replace('a', 'b') // "baa"
    
    • String.prototype.split()
    'a|b|c'.split('|') // ["a", "b", "c"]
    
    • String.prototype.localeCompare()
    // localeCompare方法用于比较两个字符串。它返回一个整数,如果小于0,表示第一个字符串小于第二个字符串;如果等于0,表示两者相等;如果大于0,表示第一个字符串大于第二个字符串。
    
    'apple'.localeCompare('banana') // -1
    'apple'.localeCompare('apple') // 0
    
    //该方法的最大特点,就是会考虑自然语言的顺序。举例来说,正常情况下,大写的英文字母小于小写字母。
    
    'B' > 'a' // false
    
    'B'.localeCompare('a') // 1
    

    5. Math对象

    静态属性

    image.png

    静态方法

    • Math.abs():绝对值
    • Math.ceil():向上取整
    • Math.floor():向下取整
    • Math.max():最大值
    • Math.min():最小值
    • Math.pow():指数运算
    • Math.sqrt():平方根
    • Math.log():自然对数
    • Math.exp():e的指数
    • Math.round():四舍五入
    • Math.random():随机数

    6. Date对象

    静态方法

    • Date.now()
    Date.now方法返回当前时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数,相当于 Unix 时间戳乘以1000。
    
    Date.now() // 1364026285194
    
    • Date.parse()
    Date.parse('Aug 9, 1995')
    Date.parse('January 26, 2011 13:51:50')
    Date.parse('Mon, 25 Dec 1995 13:30:00 GMT')
    Date.parse('Mon, 25 Dec 1995 13:30:00 +0430')
    Date.parse('2011-10-10')
    Date.parse('2011-10-10T14:48:00')
    
    • Date.UTC()
    // 格式
    Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]])
    
    // 用法
    Date.UTC(2011, 0, 1, 2, 3, 4, 567)
    // 1293847384567
    

    实例方法

    • Date.prototype.valueOf()
    • Date.prototype.toString()
    • to类
      • Date.prototype.toUTCString()
    toUTCString方法返回对应的 UTC 时间,也就是比北京时间晚8个小时。
    
    var d = new Date(2013, 0, 1);
    
    d.toUTCString()
    // "Mon, 31 Dec 2012 16:00:00 GMT"
    
    
    • Date.prototype.toISOString()
    toISOString方法返回对应时间的 ISO8601 写法。
    
    var d = new Date(2013, 0, 1);
    
    d.toISOString()
    // "2012-12-31T16:00:00.000Z"
    
    • Date.prototype.toJSON()
    toJSON方法返回一个符合 JSON 格式的 ISO 日期字符串,与toISOString方法的返回结果完全相同。
    
    var d = new Date(2013, 0, 1);
    
    d.toJSON()
    // "2012-12-31T16:00:00.000Z"
    
    • Date.prototype.toDateString()
    toDateString方法返回日期字符串(不含小时、分和秒)。
    
    var d = new Date(2013, 0, 1);
    d.toDateString() // "Tue Jan 01 2013"
    
    • Date.prototype.toTimeString()
    toTimeString方法返回时间字符串(不含年月日)。
    
    var d = new Date(2013, 0, 1);
    d.toTimeString() // "00:00:00 GMT+0800 (CST)"
    
    • Date.prototype.toLocaleDateString()
    toLocaleDateString方法返回一个字符串,代表日期的当地写法(不含小时、分和秒)。
    
    var d = new Date(2013, 0, 1);
    
    d.toLocaleDateString()
    // 中文版浏览器为"2013年1月1日"
    // 英文版浏览器为"1/1/2013"
    
    • Date.prototype.toLocaleTimeString()
    toLocaleTimeString方法返回一个字符串,代表时间的当地写法(不含年月日)。
    
    var d = new Date(2013, 0, 1);
    
    d.toLocaleTimeString()
    // 中文版浏览器为"上午12:00:00"
    // 英文版浏览器为"12:00:00 AM"
    
    • get类


      image.png
      image.png
    • set类


      image.png
      image.png

    7. RegExp对象

    实例属性

    • RegExp.prototype.ignoreCase:返回一个布尔值,表示是否设置了i修饰符。
    • RegExp.prototype.global:返回一个布尔值,表示是否设置了g修饰符。
    • RegExp.prototype.multiline:返回一个布尔值,表示是否设置了m修饰符。
    var r = /abc/igm;
    
    r.ignoreCase // true
    r.global // true
    r.multiline // true
    
    • RegExp.prototype.lastIndex:返回一个数值,表示下一次开始搜索的位置。该属性可读写,但是只在设置了g修饰符、进行连续搜索时有意义,详细介绍请看后文。
    • RegExp.prototype.source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。
    var r = /abc/igm;
    
    r.lastIndex // 0
    r.source // "abc"
    

    实例方法

    • RegExp.prototype.test()
    正则实例对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。
    
    /cat/.test('cats and dogs') // true
    上面代码验证参数字符串之中是否包含cat,结果返回true。
    
    如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。
    
    var r = /x/g;
    var s = '_x_x';
    
    r.lastIndex // 0
    r.test(s) // true
    
    r.lastIndex // 2
    r.test(s) // true
    
    r.lastIndex // 4
    r.test(s) // false
    
    • RegExp.prototype.exec()
    正则实例对象的exec方法,用来返回匹配结果。如果发现匹配,就返回一个数组,成员是匹配成功的子字符串,否则返回null。
    
    var s = '_x_x';
    var r1 = /x/;
    var r2 = /y/;
    
    r1.exec(s) // ["x"]
    r2.exec(s) // null
    

    8. JSON对象

    静态方法

    JSON对象是 JavaScript 的原生对象,用来处理 JSON 格式数据。它有两个静态方法:JSON.stringify()和JSON.parse()。

    • JSON.stringify()
    • JSON.parse()

    9. console对象

    console对象是 JavaScript 的原生对象,它有点像 Unix 系统的标准输出stdout和标准错误stderr,可以输出各种信息到控制台,并且还提供了很多有用的辅助方法。

    console的常见用途有两个。

    • 调试程序,显示网页代码运行时的错误信息。
    • 提供了一个命令行接口,用来与网页代码互动。

    console对象的静态方法

    • console.log()

    • console.info()

    • console.debug()

    • console.warn()

    • console.error()

    • console.table()

    • console.count() (count方法用于计数,输出它被调用了多少次。)

    • 执行了一次。

    • console.dir()

    • console.dirxml()

    • console.assert()

    • console.time()

    • console.timeEnd()

    • console.group()

    • console.groupEnd()

    • console.groupCollapsed()

    • console.trace()

    • console.clear()

    命令行API

    • $_
    $_属性返回上一个表达式的值。
    
    2 + 2
    // 4
    $_
    // 4
    
    • $0 - $4

    控制台保存了最近5个在 Elements 面板选中的 DOM 元素,$0代表倒数第一个(最近一个),$1代表倒数第二个,以此类推直到$4。

    • $(selector)

    $(selector)返回第一个匹配的元素,等同于document.querySelector()。注意,如果页面脚本对$有定义,则会覆盖原始的定义。比如,页面里面有 jQuery,控制台执行$(selector)就会采用 jQuery 的实现,返回一个数组。

    • $$(selector)

    $$(selector)返回选中的 DOM 对象,等同于document.querySelectorAll。

    • $x(path)

    $x(path)方法返回一个数组,包含匹配特定 XPath 表达式的所有 DOM 元素。
    $x("//p[a]")
    上面代码返回所有包含a元素的p元素。

    • inspect(object)

    inspect(object)方法打开相关面板,并选中相应的元素,显示它的细节。DOM 元素在Elements面板中显示,比如inspect(document)会在 Elements 面板显示document元素。JavaScript 对象在控制台面板Profiles面板中显示,比如inspect(window)。

    • getEventListeners(object)

    getEventListeners(object)方法返回一个对象,该对象的成员为object登记了回调函数的各种事件(比如click或keydown),每个事件对应一个数组,数组的成员为该事件的回调函数。

    • keys(object)
    • values(object)

    keys(object)方法返回一个数组,包含object的所有键名。
    values(object)方法返回一个数组,包含object的所有键值。

    var o = {'p1': 'a', 'p2': 'b'};
    
    keys(o)
    // ["p1", "p2"]
    values(o)
    // ["a", "b"]
    
    • monitorEvents(object[, events]) ,unmonitorEvents(object[, events])

    monitorEvents(object[, events])方法监听特定对象上发生的特定事件。事件发生时,会返回一个Event对象,包含该事件的相关信息。unmonitorEvents方法用于停止监听。

    monitorEvents(window, "resize");
    monitorEvents(window, ["resize", "scroll"])
    上面代码分别表示单个事件和多个事件的监听方法。
    
    monitorEvents($0, 'mouse');
    unmonitorEvents($0, 'mousemove');
    上面代码表示如何停止监听。
    

    monitorEvents允许监听同一大类的事件。所有事件可以分成四个大类。

    mouse:”mousedown”, “mouseup”, “click”, “dblclick”, “mousemove”, “mouseover”, “mouseout”, “mousewheel”
    key:”keydown”, “keyup”, “keypress”, “textInput”
    touch:”touchstart”, “touchmove”, “touchend”, “touchcancel”
    control:”resize”, “scroll”, “zoom”, “focus”, “blur”, “select”, “change”, “submit”, “reset”
    monitorEvents($("#msg"), "key");
    上面代码表示监听所有key大类的事件。

    • 其他方法

    命令行 API 还提供以下方法。

    clear():清除控制台的历史。
    copy(object):复制特定 DOM 元素到剪贴板。
    dir(object):显示特定对象的所有属性,是console.dir方法的别名。
    dirxml(object):显示特定对象的 XML 形式,是console.dirxml方法的别名。

    • debugger

    10. 属性描述对象

    image.png

    JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributes object)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。

    {
      value: 123,
      writable: false,
      enumerable: true,
      configurable: false,
      get: undefined,
      set: undefined
    }
    属性描述对象提供6个元属性。
    
    (1)value
    
    value是该属性的属性值,默认为undefined。
    
    (2)writable
    
    writable是一个布尔值,表示属性值(value)是否可改变(即是否可写),默认为true。
    
    (3)enumerable
    
    enumerable是一个布尔值,表示该属性是否可遍历,默认为true。如果设为false,会使得某些操作(比如for...in循环、Object.keys())跳过该属性。
    
    (4)configurable
    
    configurable是一个布尔值,表示可配置性,默认为true。如果设为false,将阻止某些操作改写该属性,比如无法删除该属性,也不得改变该属性的属性描述对象(value属性除外)。也就是说,configurable属性控制了属性描述对象的可写性。
    
    (5)get
    
    get是一个函数,表示该属性的取值函数(getter),默认为undefined。
    
    (6)set
    
    set是一个函数,表示该属性的存值函数(setter),默认为undefined。
    

    相关文章

      网友评论

        本文标题:JavaScript的标准库

        本文链接:https://www.haomeiwen.com/subject/hsearftx.html