6. Utilities

优质
小牛编辑
137浏览
2023-12-01

大部分实用工具都能在 native API 中找到. 其他高级功能可以选用专注于该领域的稳定性和性能都更好的库来代替,推荐 lodash。

  • 6.1 基本工具

    • isArray

    检测参数是不是数组。

    1. // jQuery
    2. $.isArray(range);
    3. // Native
    4. Array.isArray(range);
    • isWindow

    检测参数是不是 window。

    1. // jQuery
    2. $.isWindow(obj);
    3. // Native
    4. function isWindow(obj) {
    5. return obj !== null && obj !== undefined && obj === obj.window;
    6. }
    • inArray

    在数组中搜索指定值并返回索引 (找不到则返回 -1)。

    1. // jQuery
    2. $.inArray(item, array);
    3. // Native
    4. array.indexOf(item) > -1;
    5. // ES6-way
    6. array.includes(item);
    • isNumeric

    检测传入的参数是不是数字。
    Use typeof to decide the type or the type example for better accuracy.

    1. // jQuery
    2. $.isNumeric(item);
    3. // Native
    4. function isNumeric(n) {
    5. return !isNaN(parseFloat(n)) && isFinite(n);
    6. }
    • isFunction

    检测传入的参数是不是 JavaScript 函数对象。

    1. // jQuery
    2. $.isFunction(item);
    3. // Native
    4. function isFunction(item) {
    5. if (typeof item === 'function') {
    6. return true;
    7. }
    8. var type = Object.prototype.toString(item);
    9. return type === '[object Function]' || type === '[object GeneratorFunction]';
    10. }
    • isEmptyObject

    检测对象是否为空 (包括不可枚举属性).

    1. // jQuery
    2. $.isEmptyObject(obj);
    3. // Native
    4. function isEmptyObject(obj) {
    5. return Object.keys(obj).length === 0;
    6. }
    • isPlainObject

    检测是不是扁平对象 (使用 “{}” 或 “new Object” 创建).

    1. // jQuery
    2. $.isPlainObject(obj);
    3. // Native
    4. function isPlainObject(obj) {
    5. if (typeof (obj) !== 'object' || obj.nodeType || obj !== null && obj !== undefined && obj === obj.window) {
    6. return false;
    7. }
    8. if (obj.constructor &&
    9. !Object.prototype.hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf')) {
    10. return false;
    11. }
    12. return true;
    13. }
    • extend

    合并多个对象的内容到第一个对象。
    object.assign 是 ES6 API,也可以使用 polyfill。

    1. // jQuery
    2. $.extend({}, defaultOpts, opts);
    3. // Native
    4. Object.assign({}, defaultOpts, opts);
    • trim

    移除字符串头尾空白。

    1. // jQuery
    2. $.trim(string);
    3. // Native
    4. string.trim();
    • map

    将数组或对象转化为包含新内容的数组。

    1. // jQuery
    2. $.map(array, (value, index) => {
    3. });
    4. // Native
    5. array.map((value, index) => {
    6. });
    • each

    轮询函数,可用于平滑的轮询对象和数组。

    1. // jQuery
    2. $.each(array, (index, value) => {
    3. });
    4. // Native
    5. array.forEach((value, index) => {
    6. });
    • grep

    找到数组中符合过滤函数的元素。

    1. // jQuery
    2. $.grep(array, (value, index) => {
    3. });
    4. // Native
    5. array.filter((value, index) => {
    6. });
    • type

    检测对象的 JavaScript [Class] 内部类型。

    1. // jQuery
    2. $.type(obj);
    3. // Native
    4. function type(item) {
    5. const reTypeOf = /(?:^\[object\s(.*?)\]$)/;
    6. return Object.prototype.toString.call(item)
    7. .replace(reTypeOf, '$1')
    8. .toLowerCase();
    9. }
    • merge

    合并第二个数组内容到第一个数组。

    1. // jQuery
    2. $.merge(array1, array2);
    3. // Native
    4. // 使用 concat,不能去除重复值
    5. function merge(...args) {
    6. return [].concat(...args)
    7. }
    8. // ES6,同样不能去除重复值
    9. array1 = [...array1, ...array2]
    10. // 使用 Set,可以去除重复值
    11. function merge(...args) {
    12. return Array.from(new Set([].concat(...args)))
    13. }
    • now

    返回当前时间的数字呈现。

    1. // jQuery
    2. $.now();
    3. // Native
    4. Date.now();
    • proxy

    传入函数并返回一个新函数,该函数绑定指定上下文。

    1. // jQuery
    2. $.proxy(fn, context);
    3. // Native
    4. fn.bind(context);
    • makeArray

    类数组对象转化为真正的 JavaScript 数组。

    1. // jQuery
    2. $.makeArray(arrayLike);
    3. // Native
    4. Array.prototype.slice.call(arrayLike);
    5. // ES6-way
    6. Array.from(arrayLike);
  • 6.2 包含

    检测 DOM 元素是不是其他 DOM 元素的后代.

    1. // jQuery
    2. $.contains(el, child);
    3. // Native
    4. el !== child && el.contains(child);
  • 6.3 Globaleval

    全局执行 JavaScript 代码。

    1. // jQuery
    2. $.globaleval(code);
    3. // Native
    4. function Globaleval(code) {
    5. const script = document.createElement('script');
    6. script.text = code;
    7. document.head.appendChild(script).parentNode.removeChild(script);
    8. }
    9. // Use eval, but context of eval is current, context of $.Globaleval is global.
    10. eval(code);
  • 6.4 解析

    • parseHTML

    解析字符串为 DOM 节点数组.

    1. // jQuery
    2. $.parseHTML(htmlString);
    3. // Native
    4. function parseHTML(string) {
    5. const context = document.implementation.createHTMLDocument();
    6. // Set the base href for the created document so any parsed elements with URLs
    7. // are based on the document's URL
    8. const base = context.createElement('base');
    9. base.href = document.location.href;
    10. context.head.appendChild(base);
    11. context.body.innerHTML = string;
    12. return context.body.children;
    13. }
    • parseJSON

    传入格式正确的 JSON 字符串并返回 JavaScript 值.

    1. // jQuery
    2. $.parseJSON(str);
    3. // Native
    4. JSON.parse(str);