| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | var kindOf = require('./kindOf');var isPlainObject = require('./isPlainObject');var mixIn = require('../object/mixIn');    /**     * Clone native types.     */    function clone(val){        switch (kindOf(val)) {            case 'Object':                return cloneObject(val);            case 'Array':                return cloneArray(val);            case 'RegExp':                return cloneRegExp(val);            case 'Date':                return cloneDate(val);            default:                return val;        }    }    function cloneObject(source) {        if (isPlainObject(source)) {            return mixIn({}, source);        } else {            return source;        }    }    function cloneRegExp(r) {        var flags = '';        flags += r.multiline ? 'm' : '';        flags += r.global ? 'g' : '';        flags += r.ignorecase ? 'i' : '';        return new RegExp(r.source, flags);    }    function cloneDate(date) {        return new Date(+date);    }    function cloneArray(arr) {        return arr.slice();    }    module.exports = clone;
 |