您的位置:新葡亰496net > 新葡亰官网 > 面试题总结三,JavaScript中判断对象类型的几种方

面试题总结三,JavaScript中判断对象类型的几种方

发布时间:2019-06-21 08:36编辑:新葡亰官网浏览(116)

    JavaScript 原生对象及扩张

    2016/09/26 · JavaScript · 对象

    初稿出处: trigkit4   

    新近在JavaSript举办Array操作的时候发现并未有去除节点的主意,而本人要促成的职能要求不停调用删除节点的章程,查找了连带质感发掘能够动用prototype属性给Array扩大删除节点的措施,并且该格局同Array自个儿具有的push()、pop()、reverse()、slice()、sort()、join()等艺术一致使用。

    1、 javascript的typeof再次回到哪些数据类型

    alert(typeof [1, 2]);    //object 

    alert(typeof 'leipeng');    //string   

    var i = true;    alert(typeof i);  //boolean   

    alert(typeof 1);    //number   

    var a;    alert(typeof a);  //undefined 

    function a(){;};    alert(typeof a)  //function

    var a = null;alert(typeof a); //object 解释:null是贰个唯有二个值的数据类型,这些值就是null。表示一个空指针对象,所以用typeof检验会回到 ”object ”

    /****************************************************************
        JScript 常用运转库    Version 1.11
                        
        作者    :    Lostinet[迷失互联网]
        Email    :    lostinet@chongjian.com
    ****************************************************************/

    作者们了解,JavaScript中检查测试对象类型的运算符有:typeof、instanceof,还也是有对象的constructor属性:

    放置对象与原生对象

    内置(Build-in)对象与原生(Naitve)对象的界别在于:前者总是在电动机初步化阶段就被创造好的对象,是后人的贰个子集;而后者包涵了有的在运行进程中动态创建的靶子。

    图片 1

     

    function LostinetJScriptRuntimeLibrary(){}

    1) typeof 运算符 typeof 是一元运算符,再次回到结果是多少个验证运算数类型的字符串。如:"number","string","boolean","object","function","undefined"(可用于推断变量是或不是留存)。 但 typeof 的力量轻巧,其对于Date、RegExp类型再次来到的都是"object"。如:

    原生对象(New后的靶子)

    ECMA-262 把原生对象(native object)定义为“独立于宿主境况的 ECMAScript 实现提供的靶子”。包含如下:

    Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、伊娃lError、RangeError、ReferenceError、SyntaxError、TypeError、UQashqaiIError、ActiveXObject(服务器方面)、Enumerator(集结遍历类)、RegExp(正则表明式)

    1
    Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError、ActiveXObject(服务器方面)、Enumerator(集合遍历类)、RegExp(正则表达式)

    经过能够看看,一句话来说,原生对象便是 ECMA-262 定义的类(引用类型)。

    来源:

    代码1

    2、例举3种强制类型调换和2种隐式类型转变?

    强制(parseInt() , parseFloat() , Number() )

    隐式(== ,!!)

    /****************************************************************
        Global
    ****************************************************************/
    function Global(){}
    function Global.GetUndefined(){}
    function Global.ValueOf(unknown){
        if(Global.IsUndefined(unknown))return Global.GetUndefined();
        try{
            return unknown.valueOf();
        }catch(x){}
        return unknown;
    }

    typeof {}; // "object"
    typeof []; // "object"
    typeof new Date(); // "object"

    内置对象(无需New)

    概念:由ECMAScript达成提供的目的,独立于宿主景况,在一个剧本程序试行的初始处。

    :每种内置对象(built-in object)都是原生对象(Native Object),贰个平放的构造函数是三个平放的目的,也是多少个构造函数。

    来源:

    举个栗子:

    Native objects: Object (constructor), Date, Math, parseInt, eval。 string 方法比方 indexOf 和 replace, array 方法, ... Host objects (假定是浏览器意况): window, document, location, history, XMLHttpRequest, setTimeout, getElementsByTagName, querySelectorAll, ...

    1
    2
    3
    Native objects: Object (constructor), Date, Math, parseInt, eval。 string 方法比如 indexOf 和 replace, array 方法, ...
     
    Host objects (假定是浏览器环境): window, document, location, history, XMLHttpRequest, setTimeout, getElementsByTagName, querySelectorAll, ...

    ECMA-262][2 只定义了几个新的停放对象,即 GlobalMath (它们也是原生对象,依照定义,每种内置对象都以原生对象)。

    以下是ECMA-262概念的放置对象(built-in):

    global、Object、Function、Array、String、Boolean、Number、Math、Date、RegExp、JSON、Error对象(Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError 和URIError)

    1
    global、Object、Function、Array、String、Boolean、Number、Math、Date、RegExp、JSON、Error对象(Error,   EvalError, RangeError, ReferenceError,   SyntaxError, TypeError 和URIError)

    图片 2

    我们也能够修改内置对象的原型

    JavaScript

    if (!Array.prototype.forEach) { Array.prototype.forEach = function(fn){ for ( var i = 0; i < this.length; i ) { fn( this[i], i, this ); } }; } ["a", "b", "c"].forEach(function(value, index, array){ assert( value, "Is in position " index " out of " (array.length - 1) ); });

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (!Array.prototype.forEach) {
      Array.prototype.forEach = function(fn){
        for ( var i = 0; i < this.length; i ) {
          fn( this[i], i, this );
        }
      };
    }
    ["a", "b", "c"].forEach(function(value, index, array){
      assert( value, "Is in position " index " out of " (array.length - 1) );
    });

    上述代码将出口:

    PASS Is in position 0 out of 2 PASS Is in position 1 out of 2 PASS Is in position 2 out of 2

    1
    2
    3
    PASS Is in position 0 out of 2
    PASS Is in position 1 out of 2
    PASS Is in position 2 out of 2

    注意:扩大原型是很危急的:

    JavaScript

    Object.prototype.keys = function(){ var keys = []; for ( var i in this ) keys.push( i ); return keys; }; var obj = { a: 1, b: 2, c: 3 }; assert( obj.keys().length == 3, "We should only have 3 properties." ); delete Object.prototype.keys;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Object.prototype.keys = function(){
      var keys = [];
      for ( var i in this )
        keys.push( i );
      return keys;
    };
    var obj = { a: 1, b: 2, c: 3 };
    assert( obj.keys().length == 3, "We should only have 3 properties." );
    delete Object.prototype.keys;

    输出: FAIL We should only have 3 properties.

    借使不是有异乎平日需求而去扩充原生对象和原型(prototype)的做法是倒霉的

    JavaScript

    //不要这么做 Array.prototype.map = function() { // code };

    1
    2
    3
    4
    //不要这样做
    Array.prototype.map = function() {
        // code
    };

    除非那样做是值得的,举个例子,向部分旧的浏览器中增添一些ECMAScript5中的方法。
    在这种处境下,我们一般那样做:

    XHTML

    <script type="text/javascript"> if (!Array.prototype.map) { Array.prototype.map = function() { //code }; } </script>

    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
        if (!Array.prototype.map) {
            Array.prototype.map = function() {
                //code
            };
        }
    </script>

    [javascript]  

    3、split()、join() 的区别

    前端是切割成数组的花样,后者是将数组转换到字符串

    function Global.ToString(unknown){
        if(Global.IsUndefined(unknown))return "";
        if(Global.IsJScriptObject(unknown))
        {
            try{
                return String.Convert(unknown.toString());
            }catch(x){}
        }
        return String.Convert(unknown);
    }
    function Global.IsBlank(unknown){
        switch(typeof(unknown))
        {
        case "undefined":return true;
        case "string":return unknown=="";
        case "number":return unknown==0;
        case "object":return unknown==null;
        case "function":return false;
        default:return unknown?false:true;
        }
    }
    function Global.IsJScriptType(unknown)
    {
        switch(typeof(unknown))
        {
        case "object":
            return Global.IsJScriptObject(unknown);
        case "function":
        case "string":
        case "number":
        case "boolean":
        case "undefined":
            return true;
        default:
            return false;
        }
    }
    function Global.IsJScriptObject(unknown)
    {
        if(typeof(unknown)=="function")return true;
        if(typeof(unknown)!="object")return false;
        try{
            return typeof(unknown.constructor)=="function";
        }catch(x){
        }
        return false;
    }
    function Global.ThrowError(msg){
        throw(new Error(-1,msg));
    }
    /****************************************************************
        Object
    ****************************************************************/

    从而它只在分别对象和原始类型的时候才有用。要区一种对象类型和另一种对象类型,必须运用别的的措施。如:instanceof 运算符或对象的 constructor 属。

    用原型增添对象

    对js原生对象的扩张无非正是往prototype里登记,举个例子,大家可今后String对象里扩展ltrim,rtrim等方法。js每一个对象都连续自Object,并且,对象和别的品质都通过prototype目的来继续。通过prototype指标,大家能够扩张任何对象,蕴含内建的对象,如StringDate

    Array.prototype.remove = function (dx) {  

    4、数组方法 pop()  push()  unshift()  shift()

    push() 尾巴部分增添      pop() 尾巴部分除去

    unshift() 头部增加  shift() 底部剔除

    map() : 遍历数组中的元素, 再次回到二个新数组(包括回调函数再次回到的数目)

    filter():遍历数组中的成分, 再次来到一个新数组(蕴涵回调函数重返true的因素)

    /*
    unknown,function,ActiveXObject等会被感觉是undefined
    除了这些之外Object和Array,别的object类型的子属性会被忽视
    自定义的constructor会自动转为Object
    */
    //须求优化
    function Object.Encode(v)
    {
        var Encoders={"unknown":_unknown,"object":_object,"function":_function,"string":_string,"number":_number,"boolean":_boolean,"undefined":_undefined};
        return InnerEncode(v);
        function InnerEncode(v)
        {
            var der=Encoders[typeof(v)];
            if(der)
                return der(v);
            return _undefined(v);
        }
        function EncodeString(v){
            v=String.Convert(v);
            v=v.replace(/&/g,"&0");
            v=v.replace(/=/g,"&1");
            v=v.replace(/:/g,"&2");
            v=v.replace(/,/g,"&3");
            return v;
        }
        function _unknown(v)
        {
            return _undefined(v);
        }
        function _object(v)
        {
            if(!Global.IsJScriptObject(v))
                return _undefined(v);
            switch(v.constructor)
            {
            case Array:        return _Array(v);
            case Date:        return _Date(v);
            case String:    return _String(v);
            case Number:    return _Number(v);
            case Boolean:    return _Boolean(v);
            case RegExp:    return _RegExp(v);
            case Object:
            default:
                return _Object(v);
            }
            function _Object(v)
            {
                var str="object_Object=";
                var arr=[];
                for(var i in v)
                {
                    if(Global.IsJScriptType(v[i])&&typeof(v[i])!="function")
                        arr[arr.length]=EncodeString(EncodeString(i) ":" EncodeString(InnerEncode(v[i])));
                }
                return str arr.join(",");
            }
            function _Array(v)
            {
                var str="object_Array=";
                var arr=[];
                for(var i in v)
                {
                    if(Global.IsJScriptType(v[i])&&typeof(v[i])!="function")
                        arr[arr.length]=EncodeString(EncodeString(i) ":" EncodeString(InnerEncode(v[i])));
                }
                return str arr.join(",");
            }
            function _Date(v){return "object_Date=" v.getTime();}
            function _String(v){return "object_String=" EncodeString(v);}
            function _Number(v){return "object_Number=" EncodeString(v);}
            function _Boolean(v){return "object_Boolean=" EncodeString(v.ToString());}
            function _RegExp(v)
            {
                return "object_RegExp="
                    EncodeString(
                        "p:" EncodeString(v)
                        "i:" EncodeString(Boolean.ToString(v.ignoreCase))
                        "g:" EncodeString(Boolean.ToString(v.global))
                    );
            }
        }
        function _function(v){return _undefined(v);}
        function _string(v){return "string=" EncodeString(v);}
        function _number(v){return "number=" EncodeString(v);}
        function _boolean(v){return "boolean=" EncodeString(v.ToString());}
        function _undefined(v){return "undefined=undefined";}
    }
    //需求优化
    function Object.Decode(s)
    {
        s=String.Convert(s);
        var Decoders={"object_Object":_object_Object,"object_Array":_object_Array,"object_Date":_object_Date,"object_String":_object_String,"object_Number":_object_Number,"object_Boolean":_object_Boolean,"object_RegExp":_object_RegExp,"string":_string,"number":_number,"boolean":_boolean,"undefined":_undefined};
        return InnerDecode(s);
        function InnerDecode(s)
        {
            s=String.Convert(s);
            var arr=s.split("=");
            var type=arr[0];
            var der=Decoders[type];
            if(der)
                return der(String.Convert(arr[1]));
            return _undefined(String.Convert(arr[1]));
        }
        function DecodeString(v){
            v=String.Convert(v);
            v=v.replace(/&3/g,",");
            v=v.replace(/&2/g,":");
            v=v.replace(/&1/g,"=");
            v=v.replace(/&0/g,"&");
            return v;
        }
        function _object_Object(ss)
        {
            var obj=new Object();
            var arr=ss.split(",");
            for(var i=0;i<arr.length;i )
            {
                var arr2=DecodeString(arr[i]).split(":");
                var index=DecodeString(arr2[0]);
                if(index=="")break;
                obj[index]=InnerDecode(DecodeString(arr2[1]));
            }
            return obj;
        }
        function _object_Array(ss)
        {
            var obj=new Array();
            var arr=ss.split(",");
            for(var i=0;i<arr.length;i )
            {
                var arr2=DecodeString(arr[i]).split(":");
                var index=DecodeString(arr2[0]);
                if(index=="")break;
                obj[index]=InnerDecode(DecodeString(arr2[1]));
            }
            return obj;
        }
        function _object_Date(ss){return Date.Convert(Number.Convert(DecodeString(ss)));}
        function _object_String(ss){return new String(String.Convert(DecodeString(ss)));}
        function _object_Number(ss){return new Number(Number.Convert(DecodeString(ss)));}
        function _object_Boolean(ss){return new Boolean(Boolean.ConvertFromString(DecodeString(ss)));}
        function _object_RegExp(ss)
        {
            var obj=new Object();
            var arr=ss.split(",");
            for(var i=0;i<arr.length;i )
            {
                var arr2=DecodeString(arr[i]).split(":");
                var index=DecodeString(arr2[0]);
                if(index=="")break;
                obj[index]=InnerDecode(DecodeString(arr2[1]));
            }
            var re=new RegExp();
            re.pattern=String.Convert(obj.p);
            re.ignoreCase=Boolean.Convert(obj.i);
            re.global=Boolean.Convert(obj.g);
            return re;
        }
        function _string(ss){return String.Convert(DecodeString(ss));}
        function _number(ss){return Number.Convert(DecodeString(ss));}
        function _boolean(ss){return Boolean.ConvertFromString(DecodeString(ss));}
        function _undefined(ss){return Global.GetUndefined();}
    }

    2)instanceof 运算符。 instanceof 运算符须求其左边手的运算数是一个对象,右侧的运算数是对象类的名字或构造函数。假使object 是 class 或构造函数的实例,则 instanceof 运算符再次来到 true。假诺object 不是内定类或函数的实例,可能 object 为 null,则赶回 false。如:

    String对象的扩充

    JavaScript

    <script type="text/javascript"> if(typeof String.prototype.ltrim=='undefined'){ String.prototype.ltrim = function(){ var s = this; s = s.replace(/^s*/g, ''); return s; } } if(typeof String.prototype.rtrim=='undefined'){ String.prototype.rtrim = function(){ var s = this; s = s.replace(/s*$/g, ''); return s; } } if(typeof String.prototype.trim=='undefined'){ String.prototype.trim = function(){ return this.ltrim().rtrim(); } } if(typeof String.prototype.htmlEncode=='undefined'){ String.prototype.htmlEncode = function(encodeNewLine){//encodeNewLine:是否encode换行符 var s = this; s = s.replace(/&/g, '&'); s = s.replace(/</g, '<'); s = s.replace(/>/g, '>'); s = s.replace(/'/g, '"'); if(encodeNewLine){ s = s.replace(/rn/g, '<br />'); s = s.replace(/r/g, '<br />'); s = s.replace(/n/g, '<br />'); } return s; } } </script>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <script type="text/javascript">
        if(typeof String.prototype.ltrim=='undefined'){
            String.prototype.ltrim = function(){
                var s = this;
                s = s.replace(/^s*/g, '');
                return s;
            }
        }
     
        if(typeof String.prototype.rtrim=='undefined'){
            String.prototype.rtrim = function(){
                var s = this;
                s = s.replace(/s*$/g, '');
                return s;
            }
        }
     
        if(typeof String.prototype.trim=='undefined'){
            String.prototype.trim = function(){
                return this.ltrim().rtrim();
            }
        }
     
        if(typeof String.prototype.htmlEncode=='undefined'){
            String.prototype.htmlEncode = function(encodeNewLine){//encodeNewLine:是否encode换行符
                var s = this;
                s = s.replace(/&/g, '&amp;');
                s = s.replace(/</g, '&lt;');
                s = s.replace(/>/g, '&gt;');
                s = s.replace(/'/g, '&quot;');
                if(encodeNewLine){
                    s = s.replace(/rn/g, '<br />');
                    s = s.replace(/r/g, '<br />');
                    s = s.replace(/n/g, '<br />');
                }
                return s;
            }
        }
    </script>

            if (isNaN(dx) || dx > this.length) { return false; }  

    5、IE和DOM事件流的界别

    1.试行种种不雷同、

    2.参数差异

    3.事件加不加on

    4.this指向难点

    function Object.EncodeJScript(v)
    {
        if(Boolean.IsFalse(Global.IsJScriptType(v)))
        {
            return _undefined(v);
        }
        return eval("_" typeof(v))(v);
        function _object(v)
        {
            if(Boolean.IsFalse(Global.IsJScriptObject(v)))return _undefined(v);
            switch(v.constructor)
            {
            case Object:    return _Object(v);
            case Array:        return _Array(v);
            case Date:        return _Date(v);
            case String:    return _String(v);
            case Number:    return _Number(v);
            case Boolean:    return _Boolean(v);
            case RegExp:    return _RegExp(v);
            default:
                if(typeof(v.constructor)=="function")return _Object(v);
            }
            return _undefined(v);
        }
        function _Object(v)
        {
            var arr=[];
            for(var i in v)
            {
                if(typeof(v[i])!="function"&&Global.IsJScriptType(v[i]))
                    arr[arr.length]='"' String.EncodeJScript(i) '":' eval("_" typeof(v[i]))(v[i]);
            }
            return "{" arr.join(",") "}";
        }
        function _Array(v)
        {
            var arr=[];
            for(var i in v)
            {
                if(typeof(v[i])!="function"&&Global.IsJScriptType(v[i]))
                    arr[arr.length]=eval("_" typeof(v[i]))(v[i]);
            }
            return "[" arr.join(",") "]";
        }
        function _Date(v){return "new Date("" String.EncodeJScript(new Date().toUTCString()) "")";}
        function _String(v){return "new String("" String.EncodeJScript(v) "")";}
        function _Number(v){return "new Number(" Number.Convert(v) ")";}
        function _Boolean(v){return "new Boolean(" Boolean.ToString(v) ")";}
        function _RegExp(v){return "new RegExp(" v ")";}    
        function _function(v){return "(function(){})()";}
        function _string(v){return """ String.EncodeJScript(v) """}
        function _number(v){return String.Convert(v);}
        function _boolean(v){return Boolean.ToString(v);}
        function _undefined(v){return "(function(){})()";}
        function _unknown(s){return "(function(){})()";}
    }
    function Object.DecodeJScript(s)
    {
        s=String.Convert(s);
        if(s=="")return null;
        if(s=="undefined")return GetUndefined();
        var o=null;
        try{
            eval("o=" s);
        }catch(x){
            throw(new Error(-1,"Object.DecodeJScript不能够反编码n" x.description "n原代码是:n" s));
        }
        return o;
    }

    [] instanceof Array; // true
    [] instanceof Object; // true
    [] instanceof RegExp; // false
    new Date instanceof Date; // true

    Date对象的强大

    getDaysInMonth:获取某月有个别许天

    JavaScript

    Date.getDaysInMonth = function (year, month) { var days = 0; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31 break; case 4: case 6: case 9: case 11: days = 30; break; case 2: if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) days = 29; else days = 28; break; } return days; } if (typeof Date.prototype.format == 'undefined') { Date.prototype.format = function (mask) { var d = this; var zeroize = function (value, length) { if (!length) length = 2; value = String(value); for (var i = 0, zeros = ''; i < (length - value.length); i ) { zeros = '0'; } return zeros value; }; return mask.replace(/"[^"]*"|'[^']*'|b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])1?|[lLZ])b/g, function ($0) { switch ($0) { case 'd': return d.getDate(); case 'dd': return zeroize(d.getDate()); case 'ddd': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()]; case 'dddd': return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()]; case 'M': return d.getMonth() 1; case 'MM': return zeroize(d.getMonth() 1); case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()]; case 'MMMM': return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()]; case 'yy': return String(d.getFullYear()).substr(2); case 'yyyy': return d.getFullYear(); case 'h': return d.getHours() % 12 || 12; case 'hh': return zeroize(d.getHours() % 12 || 12); case 'H': return d.getHours(); case 'HH': return zeroize(d.getHours()); case 'm': return d.getMinutes(); case 'mm': return zeroize(d.getMinutes()); case 's': return d.getSeconds(); case 'ss': return zeroize(d.getSeconds()); case 'l': return zeroize(d.getMilliseconds(), 3); case 'L': var m = d.getMilliseconds(); if (m > 99) m = Math.round(m / 10); return zeroize(m); case 'tt': return d.getHours() < 12 ? 'am' : 'pm'; case 'TT': return d.getHours() < 12 ? 'AM' : 'PM'; case 'Z': return d.toUTCString().match(/[A-Z] $/); // Return quoted strings with the surrounding quotes removed default: return $0.substr(1, $0.length - 2); } }); }; }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    Date.getDaysInMonth = function (year, month) {
                var days = 0;
                switch (month) {
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                        days = 31
                        break;
                    case 4:
                    case 6:
                    case 9:
                    case 11:
                        days = 30;
                        break;
                    case 2:
                        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
                            days = 29;
                        else
                            days = 28;
                        break;
                }
                return days;
            }
     
            if (typeof Date.prototype.format == 'undefined') {
                Date.prototype.format = function (mask) {
     
                    var d = this;
     
                    var zeroize = function (value, length) {
     
                        if (!length) length = 2;
     
                        value = String(value);
     
                        for (var i = 0, zeros = ''; i < (length - value.length); i ) {
     
                            zeros = '0';
     
                        }
     
                        return zeros value;
     
                    };
     
                    return mask.replace(/"[^"]*"|'[^']*'|b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])1?|[lLZ])b/g, function ($0) {
     
                        switch ($0) {
     
                            case 'd': return d.getDate();
     
                            case 'dd': return zeroize(d.getDate());
     
                            case 'ddd': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
     
                            case 'dddd': return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
     
                            case 'M': return d.getMonth() 1;
     
                            case 'MM': return zeroize(d.getMonth() 1);
     
                            case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
     
                            case 'MMMM': return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
     
                            case 'yy': return String(d.getFullYear()).substr(2);
     
                            case 'yyyy': return d.getFullYear();
     
                            case 'h': return d.getHours() % 12 || 12;
     
                            case 'hh': return zeroize(d.getHours() % 12 || 12);
     
                            case 'H': return d.getHours();
     
                            case 'HH': return zeroize(d.getHours());
     
                            case 'm': return d.getMinutes();
     
                            case 'mm': return zeroize(d.getMinutes());
     
                            case 's': return d.getSeconds();
     
                            case 'ss': return zeroize(d.getSeconds());
     
                            case 'l': return zeroize(d.getMilliseconds(), 3);
     
                            case 'L': var m = d.getMilliseconds();
     
                                if (m > 99) m = Math.round(m / 10);
     
                                return zeroize(m);
     
                            case 'tt': return d.getHours() < 12 ? 'am' : 'pm';
     
                            case 'TT': return d.getHours() < 12 ? 'AM' : 'PM';
     
                            case 'Z': return d.toUTCString().match(/[A-Z] $/);
     
                                // Return quoted strings with the surrounding quotes removed    
     
                            default: return $0.substr(1, $0.length - 2);
     
                        }
     
                    });
     
                };
            }

            for (var i = 0, n = 0; i < this.length; i ) {  

    6、IE和正规下有哪些包容性的写法

    var ev = ev || window.event

    document.documentElement.clientWidth || document.body.clientWidth

    var target = ev.srcElement||ev.target

    /****************************************************************
        Function
    ****************************************************************/

    就此,能够用instanceof运算符来判定指标是或不是为数组类型:

    行使原生js达成复制对象及增加

    jQueryextend()主意能很方便的兑现扩展对象方法,这里要兑现的是:使用原生js落到实处复制对象,扩张对象,类似jQuery中的extend()方法

    JavaScript

    var obj1 = { name : 'trigkit4', age : 22 }; var obj2 = { name : 'frank', age : 21, speak : function(){ alert("hi, I'm name "); } }; var obj3 ={ age : 20 }; function cloneObj(oldObj) { //复制对象方法 if (typeof(oldObj) != 'object') return oldObj; if (oldObj == null) return oldObj; var newObj = Object(); for (var i in oldObj) newObj[i] = cloneObj(oldObj[i]); return newObj; } function extendObj() { //增加对象 var args = arguments;//将传递过来的参数数组赋值给args变量 if (args.length < 2) return; var temp = cloneObj(args[0]); //调用复制对象方法 for (var n = 1; n < args.length; n ) { for (var i in args[n]) { temp[i] = args[n][i]; } } return temp; } var obj =extendObj(obj1,obj2,obj3); console.log(obj);//{ name: 'frank', age: 20, speak: [Function] } console.log(obj1);//{ name: 'trigkit4', age: 22 } console.log(obj2);//{ name: 'frank', age: 21, speak: [Function] } console.log(obj3);//{ age: 20 }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    var obj1 = {
        name : 'trigkit4',
        age : 22
    };
    var obj2 = {
        name : 'frank',
        age : 21,
        speak : function(){
            alert("hi, I'm name ");
        }
    };
     
    var obj3 ={
        age : 20
    };
     
    function cloneObj(oldObj) { //复制对象方法
        if (typeof(oldObj) != 'object') return oldObj;
        if (oldObj == null) return oldObj;
        var newObj = Object();
        for (var i in oldObj)
            newObj[i] = cloneObj(oldObj[i]);
        return newObj;
    }
     
    function extendObj() { //扩展对象
        var args = arguments;//将传递过来的参数数组赋值给args变量
        if (args.length < 2) return;
        var temp = cloneObj(args[0]); //调用复制对象方法
        for (var n = 1; n < args.length; n ) {
            for (var i in args[n]) {
                temp[i] = args[n][i];
            }
        }
        return temp;
    }
    var obj =extendObj(obj1,obj2,obj3);
    console.log(obj);//{ name: 'frank', age: 20, speak: [Function] }
    console.log(obj1);//{ name: 'trigkit4', age: 22 }
    console.log(obj2);//{ name: 'frank', age: 21, speak: [Function] }
    console.log(obj3);//{ age: 20 }

                if (this[i] != this[dx]) {  

    7、call和apply的区别

    成效雷同, 都以将日前函数作为钦赐对象的形式实行, 即函数中的this是点名对象

    call(thisObj,arg1,arg2...)  //将全部参数二个三个传递进入

    apply(thisObj,[argArray])  //将全数参数放在数组中流传

    /*
    主导协议!不允许有Function.prototype.XXX();
    */

    function isArray(arr){
        return arr instanceof Array;
    }

    es5-safe 模块

    es5-safe 模块里,仅增加了能够较好贯彻的能够高枕而卧选用的有个别方法,包含:

    JavaScript

    Function.prototype.bind Object.create Object.keys Array.isArray Array.prototype.forEach Array.prototype.map Array.prototype.filter Array.prototype.every Array.prototype.some Array.prototype.reduce Array.prototype.reduceRight Array.prototype.indexOf Array.prototype.lastIndexOf String.prototype.trim Date.now

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function.prototype.bind
    Object.create
    Object.keys
    Array.isArray
    Array.prototype.forEach
    Array.prototype.map
    Array.prototype.filter
    Array.prototype.every
    Array.prototype.some
    Array.prototype.reduce
    Array.prototype.reduceRight
    Array.prototype.indexOf
    Array.prototype.lastIndexOf
    String.prototype.trim
    Date.now

    详情:

                    this[n ] = this[i]  

    8、怎么样阻止事件冒泡和事件默许行为

    //阻止事件冒泡

    if(typeof ev.stopPropagation=='function') {  //标准的

                  ev.stopPropagation();

    } else { //非标准IE

                  window.event.cancelBubble = true;

    }

    //阻止事件私下认可行为

    return  false

    /****************************************************************
        String
    ****************************************************************/
    function String.Convert(v,dv)
    {
        if(typeof(v)=="string")return v;
        if(typeof(dv)=="undefined")dv="";
        else dv=String.Convert(dv);    
        if(typeof(v)=="number")return v.toString();
        if(typeof(v)=="undefined")return dv;
        if(v===null)return dv;
        try{
            v=v ""
            if(v==="undefined")return dv;
            return String.Convert(v,dv);
        }catch(x){}
        return "[unconvertable]";
    }
    function String.ConvertArguments(args)
    {
        if(typeof(args)!="object")
        {
            if(Global.IsBlank(String.ConvertArguments.caller))return "";
            args=String.ConvertArguments.caller.arguments;
        }
        return Array.ConvertArguments(args).join("");
    }
    function String.Random(count)
    {
        var res="";
        for(var i=0;i<count;i )
        {
            var t=(Math.random()*62*1000)b;
            if(t<10)res =String.fromCharCode(t 48);
            else if(t<36)res =String.fromCharCode(t 55);
            else res =String.fromCharCode(t 61);
        }
        return res;
    }

    3)constructor 属性。 JavaScript中,每一种对象都有三个constructor属性,它引用了初叶化该目的的构造函数,常用来推断未知对象的门类。如给定贰个求知的值 通过typeof运算符来判别它是本来的值还是对象。假诺是目的,就能够利用constructor属性来判定其品种。所以决断数组的函数也足以如此写:

    对象的创始

    JavaScript 援救两种档案的次序的目的:内部对象、生成的靶子、宿主给出的对象(如 Internet 浏览器中的 windowdocument)以及ActiveX 对象(外界组件)。

    Microsoft Jscript 提供了 11 个内部(或“内置”)对象。它们是Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、Error 以及 String 对象。每二个对象有相关的方法和属性,

    JavaScript中指标的创制有以下三种格局:

    (1)使用内置对象 (2)使用JSON符号 (3)自定义对象组织

    1
    2
    3
    (1)使用内置对象
    (2)使用JSON符号
    (3)自定义对象构造

                }  

    //补满0
    function String.prototype.ToStringByZero(count)
    {
        var str=this;
        while(str.length<count)str="0" str;
        return str;
    }function String.ToStringByZero(str,count){return String.Convert(str).ToStringByZero(count);}

    function isArray(arr){
        return typeof arr == "object" && arr.constructor == Array;
    }

    一、使用内置对象

    JavaScript可用的放置对象可分为两种: 1,JavaScript语言原生对象(语言级对象),如String、Object、Function等; 2,JavaScript运营期的宿主对象(情况宿主级对象),如window、document、body等。

    1
    2
    3
    4
    JavaScript可用的内置对象可分为两种:
     
    1,JavaScript语言原生对象(语言级对象),如String、Object、Function等;
    2,JavaScript运行期的宿主对象(环境宿主级对象),如window、document、body等。

            }  

    9、 增多 删除 替换 插入到某些成分的艺术

    element.appendChild()

    element.insertBefore()

    element.replaceChild()

    element.removeChild()

    //编码SQL的常规字符串
    function String.prototype.EncodeSQL()
    {
        var str=this;
        str=str.replace(/x27/g,"''");
        return str;
    }function String.EncodeSQL(str){return String.Convert(str).EncodeSQL();}
    //用 Like 操作符时编码SQL
    function String.prototype.EncodeSQLLike()
    {
        var str=this;
        str=str.replace(/x60/g,"[`]");
        str=str.replace(/x7e/g,"[~]");
        str=str.replace(/x21/g,"[!]");
        str=str.replace(/x40/g,"[@]");
        str=str.replace(/x23/g,"[#]");
        str=str.replace(/x24/g,"[$]");
        str=str.replace(/x25/g,"[%]");
        str=str.replace(/x5e/g,"[^]");
        str=str.replace(/x26/g,"[&]");
        str=str.replace(/x2a/g,"[*]");
        str=str.replace(/x28/g,"[(]");
        str=str.replace(/x29/g,"[)]");
        str=str.replace(/x5f/g,"[_]");
        str=str.replace(/x2b/g,"[ ]");
        str=str.replace(/x7c/g,"[|]");
        str=str.replace(/x2d/g,"[-]");
        str=str.replace(/x3d/g,"[=]");
        str=str.replace(/x5c/g,"[]");
        str=str.replace(/x5b/g,"[[]");
        str=str.replace(/x5d/g,"[]]");
        str=str.replace(/x3b/g,"[;]");
        str=str.replace(/x27/g,"''");//str=str.replace(/x27/g,"[']");// ' => ''
        str=str.replace(/x2c/g,"[,]");
        str=str.replace(/x2e/g,"[.]");
        str=str.replace(/x2f/g,"[/]");
        str=str.replace(/x7b/g,"[{]");
        str=str.replace(/x7d/g,"[}]");
        str=str.replace(/x3a/g,"[:]");
        //str=str.replace(/x22/g,"["]");
        str=str.replace(/x3c/g,"[<]");
        str=str.replace(/x3e/g,"[>]");
        str=str.replace(/x3f/g,"[?]");
        return str;
    }function String.EncodeSQLLike(str){return String.Convert(str).EncodeSQLLike();}

    好些个状态下,大家能够行使instanceof运算符或对象的constructor属性来质量评定对象是或不是为数组。比如繁多JavaScript框架就是采取这三种方式来推断目的是或不是为数组类型。 可是检查评定在跨框架(cross-frame)页面中的数组时,会倒闭。原因正是在不相同框架(iframe)中开创的数组不会相互共享其prototype属性。例如:

    放到对象列表

    Array Boolean Date Error EvalError Function Infinity JSON Map Math NaN Number Object ParallelArray Promise Proxy RegExp Set String Symbol SyntaxError Uint32Array WeakSet decodeURI decodeURIComponent() encodeURI() encodeURIComponent() escape()已废弃 eval() isFinite() isNaN() null parseFloat parseInt undefined

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Array
    Boolean
    Date
    Error
    EvalError
    Function
    Infinity
    JSON
    Map
    Math
    NaN
    Number
    Object
    ParallelArray
    Promise
    Proxy
    RegExp
    Set
    String
    Symbol
    SyntaxError
    Uint32Array
    WeakSet
    decodeURI
    decodeURIComponent()
    encodeURI()
    encodeURIComponent()
    escape()已废弃
    eval()
    isFinite()
    isNaN()
    null
    parseFloat
    parseInt
    undefined

    上述资料来自:

            this.length -= 1  

    10、javascript的放置对象和宿主对象

    置于对象为Object, Array, Function, Date, Math等

    宿主为浏览器自带的window 等

    //编码成VBScript字符串,两边的引号已经加了""
    function String.prototype.EncodeVBScript()
    {
        var str=this;
        str=str.replace(/x22/g,"""");
        str=str.replace(/n/g,"" & vbNewline & _n"");
        str=str.replace(/r/g,"");
        return "_n"" str """;
    }function String.EncodeVBScript(str){return String.Convert(str).EncodeVBScript();}

    复制代码 代码如下:

    自定义对象协会

    创造高端对象组织有三种格局:使用“this”关键字构造、使用原型prototype构造

        }  

    11、window.onload和document ready的区别

    window.onload 是在dom文书档案树加载完和持有文件加载完今后试行三个函数

    document.ready原生中并未有这么些办法,jquery中有 $().ready(function),在dom文书档案树加载完以往施行叁个函数(注意,这里面包车型客车文档树加载完不意味任何文书加载完)。

    $(document).ready要比window.onload先执行

    window.onload只好出去叁回,$(document).ready能够出现数十四回

    //编码成JScript字符串,不加两边的引号
    function String.prototype.EncodeJScript()
    {
        var str=this;
        str=str.replace(/x5c/g,"\\");
        str=str.replace(/x2f/g,"\/");
        str=str.replace(/x3cS/g,"\u003cS");
        str=str.replace(/x3cs/g,"\u003cs");
        str=str.replace(/x22/g,"\"");
        str=str.replace(/x27/g,"\'");
        str=str.replace(/t/g,"\t");
        str=str.replace(/n/g,"\n");
        str=str.replace(/r/g,"\r");
        return str;
    }function String.EncodeJScript(str){return String.Convert(str).EncodeJScript();}

    <script>
    window.onload=function(){
    var iframe_arr=new window.frames[0].Array;
    alert(iframe_arr instanceof Array); // false
    alert(iframe_arr.constructor == Array); // false
    }
    </script>

    Date对象

     

    12、”==”和“===”的不同

    前者会活动转变类型

    后者不会

    //保留换行,在服务器上解码会丢掉n
    function String.prototype.EncodeJScriptCode()
    {
        var str=this;
        str=str.replace(/x5c/g,"\\");
        str=str.replace(/x2f/g,"\/");
        str=str.replace(/x3cS/g,"\u003cS");
        str=str.replace(/x3cs/g,"\u003cs");
        str=str.replace(/x22/g,"\"");
        str=str.replace(/x27/g,"\'");
        str=str.replace(/t/g,"\t");
        str=str.replace(/n/g,"\n");
        str=str.replace(/r/g,"\r");
        return str;
    }function String.EncodeJScriptCode(str){return String.Convert(str).EncodeJScriptCode();}

    在Ajaxian上看到了一种典型的检查实验方法,跨原型链调用toString()方法:Object.prototype.toString()。能够缓慢解决地点的跨框架难点。 当Object.prototype.toString(o)试行后,会执行以下步骤: 1)获取对象o的class属性。 2)连接字符串:"[object " 结果(1) "]" 3)返回 结果(2) 例如:

    get连串措施

    getDate() 从 Date 对象回到叁个月尾的某一天 (1 ~ 31)。 getDay() 从 Date 对象回到七日中的某一天 (0 ~ 6)。 getMonth() 从 Date 对象回来月份 (0 ~ 11)。 getFullYear() 从 Date 对象以三个人数字再次回到年份。注意不要选拔getYear()。 getHours() 再次来到 Date 对象的钟点 (0 ~ 23)。 getMinutes() 再次回到 Date 对象的分钟 (0 ~ 59)。 getSeconds() 重回 Date 对象的秒数 (0 ~ 59)。 getMilliseconds() 再次回到 Date 对象的微秒(0 ~ 999)。 getTime() 重临 1968 年 1 月 1 日于今的皮秒数。 getTimezoneOffset() 再次来到本地时间与格林威治规范时间 (青霉素T) 的秒钟差。 getUTCDate() 依据世界时从 Date 对象再次来到月初的一天 (1 ~ 31)。 getUTCDay() 依照世界时从 Date 对象回到周中的一天 (0 ~ 6)。 getUTCMonth() 依据世界时从 Date 对象回到月份 (0 ~ 11)。 getUTCFullYear() 依据世界时从 Date 对象回到叁个人数的年度。 getUTCHours() 依照世界时再次回到 Date 对象的小时(0 ~ 23)。 getUTCMinutes() 遵照世界时重返 Date 对象的分钟 (0 ~ 59)。 getUTCSeconds() 依照世界时重回 Date 对象的分钟 (0 ~ 59)。 getUTCMilliseconds() 依据世界时重返 Date 对象的阿秒(0 ~ 999)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
    getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
    getMonth() 从 Date 对象返回月份 (0 ~ 11)。
    getFullYear() 从 Date 对象以四位数字返回年份。注意不要使用getYear()。
    getHours() 返回 Date 对象的小时 (0 ~ 23)。
    getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
    getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
    getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
    getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
    getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。
    getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
    getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
    getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。
    getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。
    getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。
    getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。
    getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
    getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。

    测试该办法

    13、JavaScript是一门怎么的言语,它有怎样特点?

    javaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置帮忙项目。它的解释器被称为JavaScript引擎,为浏览器的一片段,广泛用于客户端的脚本语言,最早是在HTML网页上使用,用来给HTML网页扩充动态功能。JavaScript兼容于ECMA标准,由此也叫做ECMAScript。

    着力特点

    1. 是一种解释性脚本语言(代码不进行预编译)。

    2. 要害用于向HTML(规范通用标志语言下的三个施用)页面增加交互行为。

    3. 得以向来嵌入HTML页面,但写成独立的js文件有利于结会谈行为的分离。

    跨平台湾特务色,在大部浏览器的支撑下,能够在二种阳台下运转(如Windows、Linux、Mac、Android、iOS等)

    //保留换行,在服务器上解码会丢掉n
    //特殊字符转变来uxxxx
    function String.prototype.EncodeJScriptHalf()
    {
        var str=this;
        str=str.replace(/\/g,"\\");
        str=str.replace(/x2f/g,"\/");
        str=str.replace(/x3cS/g,"\u003cS");
        str=str.replace(/x3cs/g,"\u003cs");
        str=str.replace(/x26/g,"\u0026");
        str=str.replace(/x3c/g,"\u003c");
        str=str.replace(/x3e/g,"\u003e");
        str=str.replace(/x22/g,"\u0022");
        str=str.replace(/x27/g,"\u0027");
        str=str.replace(/t/g,"\t");
        str=str.replace(/n/g,"\n");
        str=str.replace(/r/g,"\r");
        return str;
    }function String.EncodeJScriptHalf(str){return String.Convert(str).EncodeJScriptHalf();}
    //全体调换到uxxxx,太慢
    function String.prototype.EncodeJScriptFull()
    {
        var str=this;
        var arr=[]
        for(var i=0;i<str.length;i )
        {
            arr[i]=str.charCodeAt(i).toString(16).ToStringByZero(4);
        }
        return "\u" arr.join("\u");
    }function String.EncodeJScriptFull(str){return String.Convert(str).EncodeJScriptFull();}
    //编码HTML
    function String.prototype.EncodeHTML()
    {
        var str=this;
        str=str.replace(/x26/g,"&");
        str=str.replace(/x3c/g,"<");
        str=str.replace(/x3e/g,">");
        str=str.replace(/x22/g,""");
        str=str.replace(/x27/g,"'");
        return str;
    }function String.EncodeHTML(str){return String.Convert(str).EncodeHTML();}
    //换行,空格,等。。。
    function String.prototype.EncodeInnerHTML()
    {
        var str=this;
        str=String.EncodeHTML(str);
        str=str.replace(/n/g,"<br/>");
        str=str.replace(/t/g,"      ");
        str=str.replace(/s/g," ");
        return str;
    }function String.EncodeInnerHTML(str){return String.Convert(str).EncodeInnerHTML();}
    //编码HTML的属性 href="xxxx"
    function String.prototype.EncodeAttr()
    {
        var str=this;
        str=String.EncodeHTML(str);
        return str;
    }function String.EncodeAttr(str){return String.Convert(str).EncodeAttr();}
    //XML编码
    function String.prototype.EncodeXML()
    {
        var str=this;
        str=str.replace(/x26/g,"&");
        str=str.replace(/x3c/g,"<");
        str=str.replace(/x3e/g,">");
        str=str.replace(/x22/g,""");
        str=str.replace(/x27/g,"'");
        return str;
    }function String.EncodeXML(str){return String.Convert(str).EncodeXML();}
    //URL编码
    function String.prototype.EncodeURL()
    {
        return Server.URLEncode(thhis);
    }function String.EncodeURL(str){return String.Convert(str).EncodeURL();}

    Object.prototype.toString.call([]); // 返回 "[object Array]"
    Object.prototype.toString.call(/reg/ig); // 返回 "[object RegExp]"

    set系列措施

    setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。 setMonth() 设置 Date 对象中月份 (0 ~ 11)。 setFullYear() 设置 Date 对象中的年份(四个人数字)。注意不要使用setYear()方法。 setHours() 设置 Date 对象中的刻钟 (0 ~ 23)。 setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。 setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。 setMilliseconds() 设置 Date 对象中的微秒 (0 ~ 999)。 setTime() 以飞秒设置 Date 对象。 setUTCDate() 依照世界时设置 Date 对象中月份的一天 (1 ~ 31)。 setUTCMonth() 依据世界时设置 Date 对象中的月份 (0 ~ 11)。 setUTCFullYear() 依据世界时设置 Date 对象中的年份(多少人数字)。 setUTCHours() 依照世界时设置 Date 对象中的时辰 (0 ~ 23)。 setUTCMinutes() 依据世界时设置 Date 对象中的秒钟 (0 ~ 59)。 setUTCSeconds() 依照世界时设置 Date 对象中的分钟 (0 ~ 59)。 setUTCMilliseconds() 依据世界时设置 Date 对象中的微秒 (0 ~ 999)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
    setMonth() 设置 Date 对象中月份 (0 ~ 11)。
    setFullYear() 设置 Date 对象中的年份(四位数字)。注意不要使用setYear()方法。
    setHours() 设置 Date 对象中的小时 (0 ~ 23)。
    setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
    setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。
    setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。
    setTime() 以毫秒设置 Date 对象。
    setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
    setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。
    setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。
    setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。
    setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
    setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
    setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。

    代码2

    13、JavaScript的数据类型都有如何?

    主导数据类型:String,boolean,Number,Undefined, Null

    引用数据类型:Object, Array, Function

    这正是说难点来了,怎样决断某变量是或不是为数组数据类型?

    艺术一.肯定其是不是富有“数组性质”,如slice()方法。可和煦给该变量定义slice方法,故偶尔会失效

    措施二.obj instanceof Array 在一些IE版本中不得法'

    办法三.办法轻松皆有尾巴,在ECMA Script第55中学定义了新点子Array.isArray(), 保险其包容性,最棒的措施如下:

    if(typeof Array.isArray==="undefined"){

            Array.isArray = function(arg){

                    return Object.prototype.toString.call(arg)==="[object Array]"

            };

    };

    function String.prototype.EasyEncode(key)
    {
        var str=this;
        key=String.Convert(key);
        if(key==="")return str;
        var arr=new Array(str.length);
        for(var i=0;i<str.length;i )
        {
            arr[i]=(str.charCodeAt(i) key.charCodeAt(i%key.length))e536;
        }
        return arr.join(",");
    }function String.EasyEncode(str,key){return String.Convert(str).EasyEncode(key);}

    那样,我们就能够写三个健全的推断指标是还是不是为数组的函数:

    toString种类措施

    toString() 把 Date 对象转变为字符串,toString()总是回到三个用美式立陶宛共和国(Republic of Lithuania)语表明的字符串。 toTimeString() 把 Date 对象的时间部分更改为字符串。 toDateString() 把 Date 对象的日子部分改变为字符串。 toUTCString() 依据世界时,把 Date 对象转变为字符串。 toLocaleString() 依照本地时间格式,把 Date 对象转变为字符串。 toLocaleTimeString() 总部面时间格式,把 Date 对象的时光部分改动为字符串。 toLocaleDateString() 依照本地时间格式,把 Date 对象的日子部分改换为字符串。

    1
    2
    3
    4
    5
    6
    7
    toString() 把 Date 对象转换为字符串,toString()总是返回一个用美式英语表达的字符串。
    toTimeString() 把 Date 对象的时间部分转换为字符串。
    toDateString() 把 Date 对象的日期部分转换为字符串。
    toUTCString() 根据世界时,把 Date 对象转换为字符串。
    toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。
    toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
    toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。

    [javascript] 

    14、看下列代码,输出什么?解释原因。

    var undefined;                                                                                                                      undefined == null; // true                                                                                                            1 == true;  // true                                                                                                                      2 == true;  // false                                                                                                                      0 == false;  // true                                                                                                                        0 == '';    // true                                                                                                                          NaN == NaN;  // false                                                                                                                [] == false; // true                                                                                                                        [] == ![];  // true                                                                                                                    undefined与null相等,但不恒等(===)                                                                                二个是number叁个是string时,会尝试将string转变为number尝试将boolean转变为number,0或1尝试将Object调换来number或string,取决于别的一个对计量的类型所以,对于0、空字符串的推断,提议使用 “===” 。“===”会先判定两边的值类型,类型不相配时为false。

    那么难点来了,看下面包车型客车代码,输出什么,foo的值怎么?

    var foo = "11" 2-"1";                                                                                        console.log(foo);                                                                                                            console.log(typeof foo);试行完后foo的值为111,foo的项目为String。

    function String.prototype.EasyDecode(key)
    {
        var str=this;
        key=String.Convert(key);
        if(key==="")return str;
        var arr=this.split(",");
        for(var i=0;i<arr.length;i )
        {
            arr[i]=String.fromCharCode( ( arr[i]-key.charCodeAt(i%key.length)   65536 )e536 );
        }
        return arr.join("");
    }function String.EasyDecode(str,key){return String.Convert(str).EasyDecode(key);}

    复制代码 代码如下:

    Array对象

    $(function () { var arr = [1, 2, 3];  

    //字符串操作
    function String.prototype.Trim()
    {
        return this.replace(/^s*/g,"").replace(/s*$/g,"");
    }function String.Trim(str){return String.Convert(str).Trim();}

    function isArray(arr){
        return Object.prototype.toString.call(arr) === "[object Array]";
    }

    属性

    constructor 内定创设对象原型的函数。 index 假如数组是经过正则表明式相称创立的,比配是字符串的下标索引为0. input 要是数组是透过正则表明式相称创立的,重临原始的字符串。 length长度 重返数组相月素个数. prototype 允许为富有目的附加属性.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    constructor
        指定创建对象原型的函数。
     
    index
        如果数组是通过正则表达式匹配创建的,比配是字符串的下标索引为0.
     
    input
        如果数组是通过正则表达式匹配创建的,返回原始的字符串。
    length长度
        返回数组中元素个数.
     
    prototype
        允许为所有对象附加属性.

           arr.remove(1);  

    15、已知有字符串foo=”get-element-by-id”,写二个function将其转化成驼峰表示法”getElementById”。

    function combo(msg){

          var arr=msg.split("-");

          for(var i=1;i<arr.length;i ){

                  arr[i]=arr[i].charAt(0).toUpperCase() arr[i]

                .substr(1,arr[i].length-1);

          }

        msg=arr.join("");

        return msg;

    }

    function String.prototype.TrimLeft()
    {
        return this.replace(/^s*/g,"");
    }function String.TrimLeft(str){return String.Convert(str).TrimLeft();}

    此种方法获得国外多少个javaScript大师的承认,在快要公布的jQuery 1.3中将选择这种方法来检查实验数组。 prototype.js的贰个追随者写了下面这些函数,用于获取对象的类型名

    方法

    那么些办法能够更动数组本人:

    pop 移除数组的最终贰个因素,重回值是被剔除的因素。 push 在数组的终极加多贰个照旧八个要素,重临值是新的数组的长短。 reverse 颠尾数组桐月素的逐个,原先第三个因素今后变为最终二个,同样原先的末梢八个要素变为了今日的率先个,也正是数组的目录爆发了转换。 shift 删除数组的首先个因素,再次来到值是删除的要素。 sort 对数组中的成分进行排序。 splice 增加或删除数组中的二个或四个成分。 unshift 增多二个恐怕七个因素在数组的开始,再次回到值是新的数组的尺寸。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    pop
        移除数组的最后一个元素,返回值是被删除的元素。
     
    push
        在数组的末尾添加一个或者多个元素,返回值是新的数组的长度。
     
    reverse
        颠倒数组中元素的顺序,原先第一个元素现在变成最后一个,同样原先的最后一个元素变成了现在的第一个,也就是数组的索引发生了变化。
     
    shift
        删除数组的第一个元素,返回值是删除的元素。
     
    sort
        对数组中的元素进行排序。
     
    splice
        添加或删除数组中的一个或多个元素。
     
    unshift
        添加一个或者多个元素在数组的开头,返回值是新的数组的长度。

           var s='';  

    16、var numberArray = [3,6,2,4,1,5];(侦察基础API)

    1) 完毕对该数组的倒排,输出[5,1,4,2,6,3]

    numberArray.reverse()

    2) 完成对该数组的降序排列,输出[6,5,4,3,2,1]

    numberArray.sort(function(a,b){  returnn b-a  })

    function String.prototype.TrimRight()
    {
        return this.replace(/s*$/g,"");
    }function String.TrimRight(str){return String.Convert(str).TrimRight();}

    复制代码 代码如下:

    Accessor 方法

    那些经过不退换数组本人

    concat 再次回到一个涵盖此数组和别的数组和/或值的三结合的新数组 indexOf 重临第一个与给定参数相等的数组成分的目录,未有找到则赶回-1。 join 将装有的数组成分连接成多少个字符串。 lastIndexOf 重返在数组中找寻到的与给定参数相等的要素的末段(最大)索引。 slice 重返数组中的一段。 toSource Returns an array literal representing the specified array; you can use this value to create a new array. Overrides the Object.toSource method. toString 再次回到代表该数组及其成分的字符,重写Object.toString 进程. valueOf Returns the primitive value of the array. Overrides the Object.valueOf method.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    concat
        返回一个包含此数组和其他数组和/或值的结合的新数组
    indexOf
        返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1。
    join
        将所有的数组元素连接成一个字符串。
     
    lastIndexOf
        返回在数组中搜索到的与给定参数相等的元素的最后(最大)索引。
     
    slice
        返回数组中的一段。
     
    toSource
        Returns an array literal representing the specified array; you can use this value to create a new array. Overrides the Object.toSource method.
     
    toString
        返回代表该数组及其元素的字符,重写Object.toString 过程.
     
    valueOf
        Returns the primitive value of the array. Overrides the Object.valueOf method.

           for(var i=0;i<arr.length;i ){  

    17、输出今日的日子,以YYYY-MM-DD的艺术,举例前些天是贰零壹肆年七月八日,则输出二〇一四-09-26

    var d = new Date();

    var year = d.getFullYear();    // 获取年,getFullYear()重回4位的数字

    var month = d.getMonth() 1;  // 获取月,月份比较卓绝,0是10月,11是四月

    month = month < 10 ? '0' month : month;    // 产生两位

    var day = d.getDate();    // 获取日

    day = day < 10 ? '0' day : day;

    alert(year '-' month '-' day);

    function String.prototype.Left(count)
    {
        return this.substr(0,count);
    }function String.Left(str,count){return String.Convert(str).Left(count);}

    /**
     * Returns internal [[Class]] property of an object
     *
     * Ecma-262, 15.2.4.2
     * Object.prototype.toString( )
     *
     * When the toString method is called, the following steps are taken:
     * 1. Get the [[Class]] property of this object.
     * 2. Compute a string value by concatenating the three strings "[object ", Result (1), and "]".
     * 3. Return Result (2).
     *
     * __getClass(5); // => "Number"
     * __getClass({}); // => "Object"
     * __getClass(/foo/); // => "RegExp"
     * __getClass(''); // => "String"
     * __getClass(true); // => "Boolean"
     * __getClass([]); // => "Array"
     * __getClass(undefined); // => "Window"
     * __getClass(Element); // => "Constructor"
     *
     */
    function __getClass(object){
        return Object.prototype.toString.call(object).match(/^[objects(.*)]$/)[1];
    };
    扩展一下,用于检查实验种种对象类型:

    循环(迭代)过程

    filter 对数组中的每多个成分调用参数中内定的过滤函数,并将对于过滤函数重临值为true的那多少个数组成分集结为新的数组重回。 forEach 对数组的每二个成分依次调用参数中钦赐的函数。 every 固然数组中每贰个因素都满意参数中提供的测试函数,则赶回真。 map Creates a new array with the results of calling a provided function on every element in this array. some 假使数组中足足有一个成分满意参数函数的测试,则赶回true。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    filter
        对数组中的每一个元素调用参数中指定的过滤函数,并将对于过滤函数返回值为true的那些数组元素集合为新的数组返回。
     
    forEach
        对数组的每一个元素依次调用参数中指定的函数。
     
    every
        如果数组中每一个元素都满足参数中提供的测试函数,则返回真。
     
    map
        Creates a new array with the results of calling a provided function on every element in this array.
     
    some
        如果数组中至少有一个元素满足参数函数的测试,则返回true。

               s = s arr[i] ',';  

    function String.prototype.Right(count)
    {
        return this.substr(this.length-count,count);
    }function String.Right(str,count){return String.Convert(str).Right(count);}

    var is ={
        types : ["Array", "Boolean", "Date", "Number", "Object", "RegExp", "String", "Window", "HTMLDocument"]
    };
    for(var i = 0, c; c = is.types[i ]; ){
        is[c] = (function(type){
            return function(obj){
               return Object.prototype.toString.call(obj) == "[object " type "]";
            }
        )(c);
    }
    alert(is.Array([])); // true
    alert(is.Date(new Date)); // true
    alert(is.RegExp(/reg/ig)); // true

    总结:

    更动原数组的艺术:pop()、push()、reverse()、shift()、sort()、splice()、unshift() 不转移原数组的方式:concat()、join()、slice()、toString()

    1
    2
    3
    改变原数组的方法:pop()、push()、reverse()、shift()、sort()、splice()、unshift()
     
    不改变原数组的方法:concat()、join()、slice()、toString()

           }  

    18、将字符串”<tr><td>{$id}</td><td>{$name}</td></tr>”中的{$id}替换到10,{$name}替换来托尼 (使用正则表明式)

    `<tr>                                                                                                                          <td>  {$id}  </td>                                                                                                  <td> {$id}_{$name} </td>                                                                          </tr>`.replace(/{$id}/g, '10').replace(/{$name}/g, 'Tony');

    function String.prototype.RemoveBlank()
    {
        return this.replace(/s*/g,"");
    }function String.RemoveBlank(str){return String.Convert(str).RemoveBlank();}

    1) typeof 运算符 typeof 是一元运算符,重回结果...

    Boolean

           alert(s.substring(0,s.length-1));  

    19、为了确认保证页面输出安全,大家平日必要对有的区别平时的字符举行转义,请写一个函数escapeHtml,将<, >, &, “进行转义

    function escapeHtml(str) {

          return str.replace(/[<>”&]/g, function(match) {   

          switch (match) {

                      case “<”:

                          return “<”;

                      case “>”:

                          return “ >”;

                      case “&”:

                          return “&”;

                      case “””:

                          return “"”;

          }  });}

    function String.prototype.IsGUID()
    {
        return /^{[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}}$/ig.test(this);
    }function String.IsGUID(str){return String.Convert(str).IsGUID(str);}

    属性

    JavaScript

    Boolean.length 长度属性,值为1. Boolean.prototype 代表Boolean构造器的原型.

    1
    2
    3
    4
    Boolean.length
        长度属性,值为1.
    Boolean.prototype
        代表Boolean构造器的原型.

       });  

    /****************************************************************
        Number
    ****************************************************************/
    function Number.Convert(v,dv)
    {
        if(typeof(dv)=="undefined")dv=0;
        else dv=Number.Convert(dv);
        if(typeof(v)=="number")return (isNaN(v)||v==Infinity||v==-Infinity)?dv:v;
        if(typeof(v)=="undefined")return dv;
        if(v===null)return dv;
        if(v===false) return dv;
        if(v==="")return dv;
        try{
            return Number.Convert(parseFloat(v),dv);
        }catch(x){}
        try{
            return Number.Convert(v 0,dv);
        }catch(x){}
        return dv;
    }
    function Number.ConvertFloat(v){return Number.Convert(v)}
    function Number.ConvertInt(v){return parseInt(Number.Convert(v))}
    function Number.ConvertRound(v){return Math.round(Number.Convert(v))}
    function Number.ConvertFloor(v){return Math.floor(Number.Convert(v))}

    方法

    JavaScript

    Boolean.prototype.toSource() Boolean.prototype.toString() Boolean.prototype.valueOf()

    1
    2
    3
    Boolean.prototype.toSource()
    Boolean.prototype.toString()
    Boolean.prototype.valueOf()

     

    19、foo = foo||bar ,那行代码是怎么着意思?为啥要这么写?

    若果foo存在,值不改变,不然把bar的值赋给foo。

    卡住表明式:作为”&&”和”||”操作符的操作数表明式,这么些表明式在举办求值时,只要最后的结果早已得以显著是真或假,求值进度便告终止,那称之为短路求值。

    mic6f$�Y

    function Number.prototype.ToStringByZero(count)
    {
        var str=String.Convert(this);
        while(str.length<count)str="0" str;
        return str;
    }function Number.ToStringByZero(num,count){return Number.Convert(num).ToStringByZero(count);}

    String 对象

    数组是从0开头编号,由此删除的因素是“2”,输出的结果为“1,3”,准确。

    20、看下列代码,将会输出什么?(变量表明进步)

    var foo = 1;

    (function(){

        console.log(foo);

        var foo = 2;

        console.log(foo);

    })()

    答案:输出undefined 和 2。上边代码相当于:

    var foo = 1;

    (function(){

        var foo;

        console.log(foo); //undefined

        foo = 2;

        console.log(foo); // 2; 

    })()

    函数证明与变量注脚会被JavaScript引擎隐式地升高到当前功能域的顶端,可是只提高名称不会晋级赋值部分

    /****************************************************************
        Boolean
    ****************************************************************/
    function Boolean.Convert(v)
    {
        if(typeof(v)=="boolean")return v;
        if(typeof(v)=="undefined")return false;
        if(v===null)return false;
        if(v===0) return false;
        if(v==="")return false;
        try{
            return Boolean.Convert(v?true:false);
        }catch(x){}
        return false;
    }
    function Boolean.ConvertFromString(str)
    {
        str=String.Convert(str).toLowerCase();
        var arr=["true","yes","是"];
        if(arr.IndexOf(str)>-1)return true;
        return false;
    }

    属性

    JavaScript

    String.length String.prototype

    1
    2
    String.length
    String.prototype

    w3school给的批注是:prototype使您有力量给目的增添属性和方法。由于JavaSript未有类的概念,由此也不知道该如何做向面向对象语言同样有再而三。prototype正是为了减轻此主题素材,为开辟者张开了一扇门,通过这扇门,开拓者可以在对象上定义属性和艺术,然后在伊始化三个变量,举例数组,那么该数组就颇具了对新定义的习性和方法的四个引用(能够将其领悟为是对Array对象新定义属性和议程的“继承”)。有的人会将“代码1”中的代码明白为是赋值,那是最佳不正确的。如若是赋值,那么将会指向内部存款和储蓄器中同一块区域,当时当大家如若在“代码2”中再起头化二个数组的话,数组1和数组2分别调用remove()方法,将不会碰着震慑。

    function Boolean.IsTrue(v)
    {
        return Boolean.Convert(v);
    }
    function Boolean.IsFalse(v)
    {
        return Boolean.Convert(v)?false:true;
    }

    方法:

    JavaScript

    charAt() 方法可重临钦命地点的字符。stringObject.charAt(index) charCodeAt() 方法可回到钦点地点的字符的 Unicode 编码。这一个再次来到值是 0 – 65535 之间的平头。 stringObject.charCodeAt(index) concat() 方法用于连接多个或多少个字符串。 stringObject.concat(stringX, stringX, …, stringX) indexOf() 方法可回到有些钦赐的字符串值在字符串中第三次出现的岗位。 stringObject.indexOf(searchvalue, fromindex) lastIndexOf() 方法可回到三个点名的字符串值最终出现的职位,在贰个字符串中的钦定地点从后迈入寻觅。 localeCompare():用地方特定的各种来比较多少个字符串stringObject.localeCompare(target) match() 方法可在字符串内寻找钦定的值,或找到八个或五个正则表明式的特别。 该办法类似 indexOf() 和 lastIndexOf(),然而它回到钦定的值,而不是字符串的职责。 stringObject.match(regexp) replace() 方法用于在字符串中用一些字符替换另一些字符,或交流三个与正则表明式相称的子串。stringObject.replace(regexp/substr, replacement) search() 方法用于检索字符串中钦命的子字符串,或探究与正则表明式相相配的子字符串。 stringObject.search(regexp) slice() 方法可领取字符串的某些部分,并以新的字符串再次回到被提取的有个别。 stringObject.slice(start, end) substring()不推荐使用,提出选用slice()代替。 substr()不引入应用,提议选用slice()替代。 toLocaleLowerCase()不推荐使用,只在土耳其共和国(Türkiye Cumhuriyeti)语等个别语种中有用,建议利用toLowerCase()代替。 toLocaleUpperCase()不推荐使用,只在土耳其共和国(The Republic of Turkey)语等个别语种中有用,建议选拔toUpperCase()代替。 toLowerCase() 方法用于把字符串转变为小写。 toUpperCase() 方法用于把字符串调换为大写。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    charAt() 方法可返回指定位置的字符。stringObject.charAt(index)
     
    charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 – 65535 之间的整数。 stringObject.charCodeAt(index)
     
    concat() 方法用于连接两个或多个字符串。
    stringObject.concat(stringX, stringX, …, stringX)
      
    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
    stringObject.indexOf(searchvalue, fromindex)
     
    lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
     
    localeCompare():用本地特定的顺序来比较两个字符串stringObject.localeCompare(target)
     
    match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
    该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
    stringObject.match(regexp)
     
     
    replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。stringObject.replace(regexp/substr, replacement)
     
    search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
    stringObject.search(regexp)
     
    slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
    stringObject.slice(start, end)
     
    substring()不推荐使用,建议使用slice()替代。
     
    substr()不推荐使用,建议使用slice()替代。
     
    toLocaleLowerCase()不推荐使用,只在土耳其语等少数语种中有用,建议使用toLowerCase()替代。
     
    toLocaleUpperCase()不推荐使用,只在土耳其语等少数语种中有用,建议使用toUpperCase()替代。
     
    toLowerCase() 方法用于把字符串转换为小写。
     
    toUpperCase() 方法用于把字符串转换为大写。

    注意:String 对象的秘技 slice()、substring()substr() 都可回到字符串的钦命部分。刚烈提议在具备场合都使用 slice()方法。

     

    20、用js实现自由挑选10–100里头的11个数字,存入多个数组,并排序。

    function randomNub(aArray, len, min, max) {

                  if (len >= (max - min)) {

                      return '超越' min '-' max '之间的个数范围' (max - min - 1) '个的总量';

                  }

                  if (aArray.length >= len) {

                      aArray.sort(function(a, b) {

                          return a - b

                      });

                      return aArray;

                  }

                  var nowNub =parseInt(Math.random() * (max - min - 1))

    • 1);             

                  for (var j = 0; j < aArray.length; j ) {

                      if (nowNub == aArray[j]) {

                          randomNub(aArray, len, min, max);               

                            return;                 

                      }

                  }             

                  aArray.push(nowNub);

                  randomNub(aArray, len, min, max);

                  return aArray;         

        }

    var arr=[];

    randomNub(arr,10,10,100);

    function Boolean.prototype.ToCNString()
    {
        return this.valueOf()?"是":"否";
    }function Boolean.ToCNString(b){return Boolean.Convert(b).ToCNString();}

    RegExp对象

    上边在Date对象达成了Format()方法,那么些一直也用得比较多。

    21、 把四个数组合併,并删除第二个成分。

    var array1 = ['a','b','c'];

    var bArray = ['d','e','f'];

    var cArray = array1.concat(bArray);

    cArray.splice(1,1);

    function Boolean.prototype.ToString()
    {
        return this.valueOf()?"true":"false";
    }function Boolean.ToString(b){return Boolean.Convert(b).ToString();}
    /****************************************************************
        Array
    ****************************************************************/
    function Array.ConvertArguments(args)
    {
        if(typeof(args)!="object")
        {
            if(Global.IsBlank(Array.ConvertArguments.caller))return "";
            args=Array.ConvertArguments.caller.arguments;
        }
        var res=[];
        for(var i=0;i<args.length;i )
        {
            res[i]=args[i];
        }
        return res;
    }
    function Array.prototype.Left(length)
    {
        return this.slice(0,length);
    }

    属性

    RegExp.prototype.constructor 创立该正则对象的构造函数。 RegExp.prototype.global 是或不是开启全局相称,也正是格外指标字符串中有所或许的相称项,而不是只举行第贰次相称。 RegExp.prototype.ignoreCase 在相称字符串时是否要不经意字符的深浅写。 RegExp.prototype.lastIndex 后一次特别起来的字符串索引地方。 RegExp.prototype.multiline 是还是不是展开多行形式相配(影响 ^ 和 $ 的一坐一起) RegExp.prototype.source 正则对象的源情势文本。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    RegExp.prototype.constructor
    创建该正则对象的构造函数。
    RegExp.prototype.global
    是否开启全局匹配,也就是匹配目标字符串中所有可能的匹配项,而不是只进行第一次匹配。
     
    RegExp.prototype.ignoreCase
    在匹配字符串时是否要忽略字符的大小写。
     
    RegExp.prototype.lastIndex
    下次匹配开始的字符串索引位置。
     
    RegExp.prototype.multiline
    是否开启多行模式匹配(影响 ^ 和 $ 的行为)
     
    RegExp.prototype.source
    正则对象的源模式文本。

     

    function Array.prototype.Mid(start,length)
    {
        return this.slice(start,start length);
    }

    方法

    JavaScript

    RegExp.prototype.exec() 在目的字符串中施行一回正则相称操作。 RegExp.prototype.test() 测试当前正则是不是能协作指标字符串。 RegExp.prototype.toString() 重返三个字符串,其值为该正则对象的字面量形式。覆盖了Object.prototype.toString() 方法。

    1
    2
    3
    4
    5
    6
    7
    RegExp.prototype.exec()
        在目标字符串中执行一次正则匹配操作。
    RegExp.prototype.test()
        测试当前正则是否能匹配目标字符串。
    RegExp.prototype.toString()
        返回一个字符串,其值为该正则对象的字面量形式。覆盖了Object.prototype.toString() 方法。

    [javascript]  

    22、  如何增加、移除、移动、复制、创造和搜索节点(原生JS,实在基础,没细写每一步)

    1)创设新节点

    createDocumentFragment()    //创立贰个DOM片段

    createElement()  //创造四个有血有肉的成分

    createTextNode()  //创制一个文书节点

    2)添加、移除、替换、插入

    appendChild()      //添加

    removeChild()      //移除

    replaceChild()      //替换

    insertBefore()      //插入

    3)查找

    getElementsByTagName()    //通过标签字称

    getElementsByName()    //

    通过成分的Name属性的值

    getElementById()        //

    透过成分Id,唯一性没细

    function Array.prototype.Right(length)
    {
        if(length>=this.length)return this.concat();
        return this.slice(this.length-length,this.length);
    }

    Object对象

    当以非构造函数格局被调用时,Object 等同于 new Object()

       // Date对象上贯彻Format方法,将 Date 转化为钦点格式的String  

    23、  有诸如此类二个UCRUISERL:, b:’2′, c:”, d:’xxx’, e:undefined}。

    function serilizeUrl(url) {

        var urlObject = {};

        if (/?/.test(url)) {

            var urlString = url.substring(url.indexOf("?") 1);

            var urlArray = urlString.split("&");

            for (var i = 0, len = urlArray.length; i < len; i ) {

                var urlItem = urlArray[i];

                var item = urlItem.split("=");

                urlObject[item[0]] = item[1];

            }

            return urlObject;

        }

        return null;

    }

    function Array.prototype.IndexOf(obj,start)
    {
        start=Number.Convert(start);
        var l=this.length;
        for(var i=start;i<l;i )
        {
            if(this[i]===obj)return i
        }
        return -1;
    }

    性情或措施

    Object的各类实例都富有协同的宗旨本性和措施

    属性或者方法 说明
    constructor 指向创建当前对象的构造函数
    hasOwnProperty(name) 检测给定属性name在实例对象(不是原型对象)中是否存在。name以字符串形式指定
    isPropertyOf(object) 检测传入的对象object是否该方法调用者的原型对象。一般格式:Class.prototype.isPropertyOf(object)
    propertyIsEnumerable(pr) 检测属性pr能否用for-in循环枚举。属性pro用字符串形式指定
    toLocaleString() 返回对象的字符串表示。与地区和环境对应
    toString() 返回对象的字符串表示
    valueOf() 返回对象的字符串、数值或布尔值表示

       // 月(M)、日(d)、时辰(h)、分(m)、秒(s)、季度(q) 能够用 1-2 个占位符,   

    24 、 正则表达式构造函数var reg=new RegExp(“xxx”)与正则表明字面量var reg=//有啥两样?相称邮箱的正则表明式?

    当使用RegExp()构造函数的时候,不止需求转义引号(即”表示”),并且还索要双反斜杠(即\表示二个)。使用正则表明字面量的频率越来越高。

    邮箱的正则相称:

    var regMail = /^([a-zA-Z0-9_-]) @([a-zA-Z0-9_-]) ((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

    function Array.prototype.LastIndexOf(obj)
    {
        var l=this.length;
        for(var i=l-1;i>=0;i--)
        {
            if(this[i]===obj)return i
        }
        return -1;
    }

    静态方法

    JavaScript

    Object.create(prototype, descriptors) 以钦点的原型成立对象,并且可以(可选)的安装对象的天性Object.defineProperty(object, propertyname, descriptor) 对钦命的靶子的一个属性设置增添的值调整 Object.defineProperties(object, descriptors) 对钦点的对象的一组属性提供足够的值调控Object.getOwnPropertyDescriptor(object, propertyname) 再次来到属性的概念 Object.getOwnPropertyNames(object) 重临全数属性的名称,哪怕说是不能够枚举的特性Object.preventExtensions(object) 防止新的属性加多到目的Object.isExtensible(object) 是或不是可增加属性到对象 Object.seal(object) 阻止向内定对象增多新属性或删除现存属性 Object.freeze(object) 幸免现存属性和属性值的修改,并防守新特色的充分。 Object.isFrozen(object) 检查当前目的是还是不是已结冰 Object.getPrototypeOf(object) 重临钦命对象的原型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Object.create(prototype, descriptors)
    以指定的原型创建对象,并且可以(可选)的设置对象的属性
            
    Object.defineProperty(object, propertyname, descriptor)
    对指定的对象的一个属性设置丰富的值控制
     
    Object.defineProperties(object, descriptors)
    对指定的对象的一组属性提供丰富的值控制        
        
    Object.getOwnPropertyDescriptor(object, propertyname)
    返回属性的定义
     
    Object.getOwnPropertyNames(object)
    返回所有属性的名称,哪怕说是不能枚举的属性
     
    Object.preventExtensions(object)
    防止新的属性添加到对象
     
    Object.isExtensible(object)
    是否可添加属性到对象
     
    Object.seal(object)
    阻止向指定对象添加新属性或删除现有属性
     
    Object.freeze(object)
    防止现有属性和属性值的修改,并防止新特性的添加。
     
    Object.isFrozen(object)
    检查当前对象是否已冻结
     
    Object.getPrototypeOf(object)
    返回指定对象的原型

       // 年(y)能够用 1-4 个占位符,飞秒(S)只可以用 1 个占位符(是 1-3 位的数字)   

    25、 看下边代码,给出输出结果。

    for(var i=1;i<=3;i ){

          setTimeout(function(){

                  console.log(i);

            },0);

    };    答案:4 4 4。

    由来:回调函数是在for截至之后才运转的。 如何让上述代码输出1 2 3?

    for(var i=1;i<=3;i ){

          set提姆eout((function(j){  //改成当下推行函数

                    console.log(j);

          })(i),0);

    };

    function Array.prototype.Item(index)
    {
        return this[index];
    }

    大局属性和措施

       // 使用格局:   

    //JScript5.5
    function Array.prototype.RemoveItem(index)
    {
        this.splice(index,1);
    }
    //5.5
    function Array.prototype.RemoveLeft(count)
    {
        this.splice(0,count);
    }
    //5.5
    function Array.prototype.RemoveRight(count)
    {
        var start=this.length-count;
        var length=count;
        if(start<0)
        {
            start=0;
            length=this.length;
        }
        this.splice(start,length)
    }
    /****************************************************************
        Date
    ****************************************************************/
    function Date.Convert(v,dv)
    {
        var d;
        try{
            d=new Date(v.toUTCString());//幸免循环
        }
        catch(x){
            switch(typeof(x))
            {
            case "number":
                var d=new Date();
                d.setTime(Number.ConvertInt(number));
                break;
            case "string":
            default:
                d=new Date(v);
            }
        }
        if(typeof(dv)!="undefined"&&Number.Convert(d.getTime(),0)==0)
        {
            return Date.Convert(dv);
        }
        return d;
    }
    function Date.GetTime()
    {
        return new Date().getTime();
    }

    全局方法

    图片 3

       // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") -> 2014-04-16 10:12:30.526  

    26、  写贰个function,清除字符串前后的空格。(包容全部浏览器)

    if (!String.prototype.trim) {

          String.prototype.trim = function() {

                  return this.replace(/^s /, "").replace(/s $/,"");

            }

    }

    //测试    var str = " tn test string ".trim();

                alert(str== "test string"); // alerts "true"

    //时区管理
    function Date.prototype.GetTZO()//timezoneoffset
    {
        if(typeof(this.tzo)=="undefined")
    面试题总结三,JavaScript中判断对象类型的几种方法总结。    {
            this.tzo=this.getTimezoneOffset();
        }
        return this.tzo;
    }function Date.GetTZO(date){return Date.Convert(date).GetTZO();}

    全局属性

    图片 4

    1 赞 3 收藏 评论

    图片 5

       // (new Date()).Format("yyyy-M-d h:m:s.S")      -> 2014-4-16 7:6:9.25  

    27、 1.    Javascript中, 以下哪条语句一定会发生运维错误?     

    A、var obj = ();                  B、 var obj = [];                    C、  var obj = {};        D、 var obj = //;                E、var obj = NaN;            AD错误

    function Date.prototype.GetTZD(tzo)
    {
        if(typeof(tzo)=="undefined")tzo=this.GetTZO();
        tzo=Number.ConvertInt(tzo);
        var d=Date.Convert(this);
        d.setMinutes(d.getMinutes() d.GetTZO()-tzo);
        d.tzo=tzo;
        return d;
    }function Date.GetTZD(date,tzo){return Date.Convert(date).GetTZD(tzo);}

    Date.prototype.Format = function (fmt) {  

    //数据库日期的出口

           var o = {  

    28、  以下三个变量a和b,a b的哪位结果是NaN?

          答案(  AC  )

    A、var a=undefined;  b=NaN                B、var a= ‘123’;b=NaN

    C、var a =undefined , b =NaN            D、 var a=NaN , b='undefined' 

    //用在rs("date")=new Date().ToSQL()
    function Date.prototype.ToSQL(tzo)
    {
        tzo=Number.Convert(tzo);
        if(tzo)var d=this.GetTZD(tzo);else d=this;
        return    d.getFullYear().ToStringByZero(4) "-" (d.getMonth() 1).ToStringByZero(2) "-" d.getDate().ToStringByZero(2)
                 " "
                d.getHours().ToStringByZero(2) ":" d.getMinutes().ToStringByZero(2) ":" d.getSeconds().ToStringByZero(2);
    }function Date.ToSQL(date,tzo){return Date.Convert(date).ToSQL(tzo);}

               "M ": this.getMonth() 1, //月份   

    //ToODBCXXX 用在SQL语句中
    function Date.prototype.ToODBCString(tzo)
    {
        tzo=Number.Convert(tzo);
        if(tzo)var d=this.GetTZD(tzo);else d=this;
        return    "{ ts'"
                
                d.getFullYear().ToStringByZero(4) "-" (d.getMonth() 1).ToStringByZero(2) "-" d.getDate().ToStringByZero(2)
                 " "
                d.getHours().ToStringByZero(2) ":" d.getMinutes().ToStringByZero(2) ":" d.getSeconds().ToStringByZero(2) "." d.getMilliseconds().ToStringByZero(3)
                
                "' }";
    }function Date.ToODBCString(date,tzo){return Date.Convert(date).ToODBCString(tzo);}

               "d ": this.getDate(), //日   

    29、var a=10; b=20; c=4;  b c a 以下哪些结果是不易的?

    A 34  B、35  C、36  D、37    答案(  B  )

    function Date.prototype.ToODBCDateString(tzo)
    {
        tzo=Number.Convert(tzo);
        if(tzo)var d=this.GetTZD(tzo);else d=this;
        return "{ d'"
                
                d.getFullYear().ToStringByZero(4) "-" (d.getMonth() 1).ToStringByZero(2) "-" d.getDate().ToStringByZero(2)
                 "' }";
    }function Date.ToODBCDateString(date,tzo){return Date.Convert(date).ToODBCDateString(tzo);}

               "h ": this.getHours(), //小时   

    function Date.prototype.ToODBCTimeString(tzo)
    {
        tzo=Number.Convert(tzo);
        if(tzo)var d=this.GetTZD(tzo);else d=this;
        return "{ t'"
                
                d.getHours().ToStringByZero(2) ":" d.getMinutes().ToStringByZero(2) ":" d.getSeconds().ToStringByZero(2) "." d.getMilliseconds().ToStringByZero(3)
                 "' }";
    }function Date.ToODBCTimeString(date,tzo){return Date.Convert(date).ToODBCTimeString(tzo);}

               "m ": this.getMinutes(), //分   

    30、 实现检索当前页面中的表单成分中的全数文本框,并将它们整个清空

    for(vari=0;i< document.forms.length; i ){

          for(var j=0;j< document.forms.elements.length; j ){

                if(document.forms.elements[j].type==”text”)

                      document.forms.elements[j].value=”";

          }

    }

    //普通话日期的显得
    function Date.prototype.ToCNString(tzo)
    {
        tzo=Number.Convert(tzo);
        if(tzo)var d=this.GetTZD(tzo);else d=this;
        return    d.getFullYear().ToStringByZero(4) "年" (d.getMonth() 1).ToStringByZero(2) "月" d.getDate().ToStringByZero(2)
                 "日 "
                d.getHours().ToStringByZero(2) "时" d.getMinutes().ToStringByZero(2) "分" d.getSeconds().ToStringByZero(2) "秒";
    }function Date.ToCNString(date,tzo){return Date.Convert(date).ToCNString(tzo);}

               "s ": this.getSeconds(), //秒   

    31、  要将页面包车型的士意况栏中显示“已经入选该文本框”,下列JavaScript语句精确的是( A )

    function Date.prototype.ToCNDateString(tzo)
    {
        tzo=Number.Convert(tzo);
        if(tzo)var d=this.GetTZD(tzo);else d=this;
        return    d.getFullYear().ToStringByZero(4) "年" (d.getMonth() 1).ToStringByZero(2) "月" d.getDate().ToStringByZero(2) "日";
    }function Date.ToCNDateString(date,tzo){return Date.Convert(date).ToCNDateString(tzo);}

               "q ": Math.floor((this.getMonth() 3) / 3), //季度   

    A. window.status=”已经入选该文本框”                                                            B. document.status=”已经入选该文本框”                                                          C. window.screen=”已经入选该文本框”                                                            D. document.screen=”已经入选该文本框”

    function Date.prototype.ToCNTimeString(tzo)
    {
        tzo=Number.Convert(tzo);
        if(tzo)var d=this.GetTZD(tzo);else d=this;
        return    d.getHours().ToStringByZero(2) "时" d.getMinutes().ToStringByZero(2) "分" d.getSeconds().ToStringByZero(2) "秒";
    }function Date.ToCNTimeString(date,tzo){return Date.Convert(date).ToCNTimeString(tzo);}

               "S": this.getMilliseconds() //毫秒   

    function Date.prototype.ToString(tzo)
    {
        return this.ToCNString(tzo);
    }function Date.ToString(date,tzo){return Date.Convert(date).ToString(tzo);}

           };  

    32、  请选拔结果为实在表明式:(C)

    A.null instanceof Object                                                                              B.null === undefined                                                                                        C.null == undefined                                                                                    D.NaN == NaN

    /****************************************************************
        Math
    ****************************************************************/
    function Math.NearZero(v)
    {
        v=Number.ConvertFloat(v);
        return v>0?Math.floor(v):Math.ceil(v);
    }
    function Math.RandomInt(max)
    {
        max=Number.ConvertInt(max,101);
        return Math.floor(Math.random()*max);
    }
    //全部参数的最大值,允许Array做参数
    function Math.MaxOf()
    {
        var arr=arguments;
        var res=-Infinity;
        for(var i=0;i<arr.length;i )
        {
            var item=arr[i];
            if(item instanceof Array)
            {
                for(var j=0;j<item.length;j )
                {
                    var v=parseFloat(item[j]);
                    if(v>res)res=v;
                }
            }
            else
            {
                var v=parseFloat(item);
                if(v>res)res=v;
            }
        }
        return res;    
    }
    //全体参数的小不点儿值,允许Array做参数
    function Math.MinOf()
    {
        var arr=arguments;
        var res=Infinity;
        for(var i=0;i<arr.length;i )
        {
            var item=arr[i];
            if(item instanceof Array)
            {
                for(var j=0;j<item.length;j )
                {
                    var v=parseFloat(item[j]);
                    if(v<res)res=v;
                }
            }
            else
            {
                var v=parseFloat(item);
                if(v<res)res=v;
            }
        }
        return res;    
    }

           // RegExp.$1 回到相称的首先个字符串(以括号为标记)  

    function String.prototype.SHA1()
    {
        var hex_chr = "0123456789abcdef";
        return calcSHA1(this);
        function hex(num)
        {
            var str = "";
            for(var j = 7; j >= 0; j--)
                str  = hex_chr.charAt((num >> (j * 4)) & 0x0F);
            return str;
        }
        function str2blks_SHA1(str)
        {
            var nblk = ((str.length   8) >> 6)   1;
            var blks = new Array(nblk * 16);
            for(var i = 0; i < nblk * 16; i )
                blks[i] = 0;
            for(var i = 0; i < str.length; i )
                blks[i >> 2] |= str.charCodeAt(i) << (24 - (i % 4) * 8);
            blks[i >> 2] |= 0x80 << (24 - (i % 4) * 8);
            blks[nblk * 16 - 1] = str.length * 8;
            return blks;
        }
        function safe_add(x, y)
        {
            var lsw = (x & 0xFFFF)   (y & 0xFFFF);
            var msw = (x >> 16)   (y >> 16)   (lsw >> 16);
            return (msw << 16) | (lsw & 0xFFFF);
        }
        function rol(num, cnt)
        {
            return (num << cnt) | (num >>> (32 - cnt));
        }
        function ft(t, b, c, d)
        {
            if(t < 20)
                return (b & c) | ((~b) & d);
            if(t < 40) 
                return b ^ c ^ d;
            if(t < 60) 
                return (b & c) | (b & d) | (c & d);
            return b ^ c ^ d;
        }
        function kt(t)
        {
            return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
            (t < 60) ? -1894007588 : -899497514;
        }
        function calcSHA1(str)
        {
            var x = str2blks_SHA1(str);
            var w = new Array(80);
            var a =  1732584193;
            var b = -271733879;
            var c = -1732584194;
            var d =  271733878;
            var e = -1009589776;
            for(var i = 0; i < x.length; i  = 16)
            {
                var olda = a;
                var oldb = b;
                var oldc = c;
                var oldd = d;
                var olde = e;
                for(var j = 0; j < 80; j )
                {
                    if(j < 16)
                        w[j] = x[i   j];
                    else
                        w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
                    var t = safe_add(safe_add(rol(a, 5), ft(j, b, c, d)), safe_add(safe_add(e, w[j]), kt(j)));
                    e = d;
                    d = c;
                    c = rol(b, 30);
                    b = a;
                    a = t;
                }
                a = safe_add(a, olda);
                b = safe_add(b, oldb);
                c = safe_add(c, oldc);
                d = safe_add(d, oldd);
                e = safe_add(e, olde);
            }
            return hex(a)   hex(b)   hex(c)   hex(d)   hex(e);
        }
    }function String.SHA1(str){return String.Convert(str).SHA1();}

           if (/(y )/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() "").substr(4 - RegExp.$1.length));  

    33、 深入分析代码,得出正确的结果。

    var a=10, b=20 , c=30;                                                                                a;                                                                                                              a ;                                                                                                                    e= a ( b)

    • (c ) a ;                                                                      alert(e);弹出提醒对话框:77

    function String.prototype.MD5()
    {
        return calcMD5(this);
        function safe_add(x, y)
        {
            var lsw = (x & 0xFFFF)   (y & 0xFFFF)
            var msw = (x >> 16)   (y >> 16)   (lsw >> 16)
            return (msw << 16) | (lsw & 0xFFFF)
        }
        function rol(num, cnt)
        {
            return (num << cnt) | (num >>> (32 - cnt))
        }
        function cmn(q, a, b, x, s, t)
        {
            return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
        }
        function ff(a, b, c, d, x, s, t)
        {
            return cmn((b & c) | ((~b) & d), a, b, x, s, t)
        }
        function gg(a, b, c, d, x, s, t)
        {
            return cmn((b & d) | (c & (~d)), a, b, x, s, t)
        }
        function hh(a, b, c, d, x, s, t)
        {
            return cmn(b ^ c ^ d, a, b, x, s, t)
        }
        function ii(a, b, c, d, x, s, t)
        {
            return cmn(c ^ (b | (~d)), a, b, x, s, t)
        }
        function coreMD5(x)
        {
            var a =  1732584193
            var b = -271733879
            var c = -1732584194
            var d =  271733878
            for(i = 0; i < x.length; i  = 16)
            {
                var olda = a
                var oldb = b
                var oldc = c
                var oldd = d
                a = ff(a, b, c, d, x[i  0], 7 , -680876936)
                d = ff(d, a, b, c, x[i  1], 12, -389564586)
                c = ff(c, d, a, b, x[i  2], 17,  606105819)
                b = ff(b, c, d, a, x[i  3], 22, -1044525330)
                a = ff(a, b, c, d, x[i  4], 7 , -176418897)
                d = ff(d, a, b, c, x[i  5], 12,  1200080426)
                c = ff(c, d, a, b, x[i  6], 17, -1473231341)
                b = ff(b, c, d, a, x[i  7], 22, -45705983)
                a = ff(a, b, c, d, x[i  8], 7 ,  1770035416)
                d = ff(d, a, b, c, x[i  9], 12, -1958414417)
                c = ff(c, d, a, b, x[i 10], 17, -42063)
                b = ff(b, c, d, a, x[i 11], 22, -1990404162)
                a = ff(a, b, c, d, x[i 12], 7 ,  1804603682)
                d = ff(d, a, b, c, x[i 13], 12, -40341101)
                c = ff(c, d, a, b, x[i 14], 17, -1502002290)
                b = ff(b, c, d, a, x[i 15], 22,  1236535329)
                a = gg(a, b, c, d, x[i  1], 5 , -165796510)
                d = gg(d, a, b, c, x[i  6], 9 , -1069501632)
                c = gg(c, d, a, b, x[i 11], 14,  643717713)
                b = gg(b, c, d, a, x[i  0], 20, -373897302)
                a = gg(a, b, c, d, x[i  5], 5 , -701558691)
                d = gg(d, a, b, c, x[i 10], 9 ,  38016083)
                c = gg(c, d, a, b, x[i 15], 14, -660478335)
                b = gg(b, c, d, a, x[i  4], 20, -405537848)
                a = gg(a, b, c, d, x[i  9], 5 ,  568446438)
                d = gg(d, a, b, c, x[i 14], 9 , -1019803690)
                c = gg(c, d, a, b, x[i  3], 14, -187363961)
                b = gg(b, c, d, a, x[i  8], 20,  1163531501)
                a = gg(a, b, c, d, x[i 13], 5 , -1444681467)
                d = gg(d, a, b, c, x[i  2], 9 , -51403784)
                c = gg(c, d, a, b, x[i  7], 14,  1735328473)
                b = gg(b, c, d, a, x[i 12], 20, -1926607734)
                a = hh(a, b, c, d, x[i  5], 4 , -378558)
                d = hh(d, a, b, c, x[i  8], 11, -2022574463)
                c = hh(c, d, a, b, x[i 11], 16,  1839030562)
                b = hh(b, c, d, a, x[i 14], 23, -35309556)
                a = hh(a, b, c, d, x[i  1], 4 , -1530992060)
                d = hh(d, a, b, c, x[i  4], 11,  1272893353)
                c = hh(c, d, a, b, x[i  7], 16, -155497632)
                b = hh(b, c, d, a, x[i 10], 23, -1094730640)
                a = hh(a, b, c, d, x[i 13], 4 ,  681279174)
                d = hh(d, a, b, c, x[i  0], 11, -358537222)
                c = hh(c, d, a, b, x[i  3], 16, -722521979)
                b = hh(b, c, d, a, x[i  6], 23,  76029189)
                a = hh(a, b, c, d, x[i  9], 4 , -640364487)
                d = hh(d, a, b, c, x[i 12], 11, -421815835)
                c = hh(c, d, a, b, x[i 15], 16,  530742520)
                b = hh(b, c, d, a, x[i  2], 23, -995338651)
                a = ii(a, b, c, d, x[i  0], 6 , -198630844)
                d = ii(d, a, b, c, x[i  7], 10,  1126891415)
                c = ii(c, d, a, b, x[i 14], 15, -1416354905)
                b = ii(b, c, d, a, x[i  5], 21, -57434055)
                a = ii(a, b, c, d, x[i 12], 6 ,  1700485571)
                d = ii(d, a, b, c, x[i  3], 10, -1894986606)
                c = ii(c, d, a, b, x[i 10], 15, -1051523)
                b = ii(b, c, d, a, x[i  1], 21, -2054922799)
                a = ii(a, b, c, d, x[i  8], 6 ,  1873313359)
                d = ii(d, a, b, c, x[i 15], 10, -30611744)
                c = ii(c, d, a, b, x[i  6], 15, -1560198380)
                b = ii(b, c, d, a, x[i 13], 21,  1309151649)
                a = ii(a, b, c, d, x[i  4], 6 , -145523070)
                d = ii(d, a, b, c, x[i 11], 10, -1120210379)
                c = ii(c, d, a, b, x[i  2], 15,  718787259)
                b = ii(b, c, d, a, x[i  9], 21, -343485551)
                a = safe_add(a, olda)
                b = safe_add(b, oldb)
                c = safe_add(c, oldc)
                d = safe_add(d, oldd)
            }
            return [a, b, c, d]
        }
        function binl2hex(binarray)
        {
            var hex_tab = "0123456789abcdef"
            var str = ""
            for(var i = 0; i < binarray.length * 4; i )
            {
                str  = hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 4)) & 0xF) 
                hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)
            }
            return str
        }
        function binl2b64(binarray)
        {
            var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /"
            var str = ""
            for(var i = 0; i < binarray.length * 32; i  = 6)
            {
                str  = tab.charAt(((binarray[i>>5] << (i2)) & 0x3F) |
                ((binarray[i>>5 1] >> (32-i2)) & 0x3F))
            }
            return str
        }
        function str2binl(str)
        {
            var nblk = ((str.length   8) >> 6)   1 
            var blks = new Array(nblk * 16)
            for(var i = 0; i < nblk * 16; i ) blks[i] = 0
                for(var i = 0; i < str.length; i )
                blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)
            blks[i>>2] |= 0x80 << ((i%4) * 8)
            blks[nblk*16-2] = str.length * 8
            return blks
        }
        function strw2binl(str)
        {
            var nblk = ((str.length   4) >> 5)   1
            var blks = new Array(nblk * 16)
            for(var i = 0; i < nblk * 16; i ) blks[i] = 0
                for(var i = 0; i < str.length; i )
                blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)
            blks[i>>1] |= 0x80 << ((i%2) * 16)
            blks[nblk*16-2] = str.length * 16
            return blks
        }
        function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }
        function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
        function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }
        function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
        function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }
    }function String.MD5(str){return String.Convert(str).MD5();}

           for (var k in o) {  

    /****************************************************************
        Misc
    ****************************************************************/
    function GetTodayAtom()
    {
        return Math.pow(1/2,(new Date("2000/1/1").getTime()-new Date().getTime())/1000/60/60/24/365)
    }

               if (new RegExp("(" k ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" o[k]).substr(("" o[k]).length)));  

    34、 写出函数Date德姆o的回来结果,系统时间借使为明日

    function DateDemo(){

          var d, s="昨日日子是:";

          d = new Date();              s = d.getMonth() 1 "/";

          s = d.getDate() "/";          s = d.getFullYear();

          return s;

    }          结果:前些天日期是:01/18/2018

           }  

           return fmt;  

    35、  写出程序运维的结果?

       }  

    for(i=0, j=0; i<10, j<6; i , j ){

          k = i j;      }                //结果:10

     

    在那个例子中有四个正则表达式的利用,RegExp.$1能够回去第八个地位相当的字符串,下边用三个例证来注明难点。

    36、  阅读以下代码,请分析出结果:

    [javascript]  

    var arr = new Array(1 ,3 ,5);                                                                          arr[4]='z';                                                                                                            arr2 = arr.reverse();                                                                                            arr3 = arr.concat(arr2);                                                                                    alert(arr3);                    //z,,5,3,1,z,,5,3,1

    $(function () {  

           var r = /^(d{4})-(d{1,2})-(d{1,2})$/;  

    37、写出大致描述html标签(不带属性的起来标签和完工标签)的正则表明式,并将以下字符串中的html标签去除掉

    var str = “<div>  这里是div  <p>里面包车型客车段落</p>  </div>;

    <script type="text/javascript>”;

          var reg = /< /?w /?>/gi;

          var str = “<div>   这里是div < p>里面包车型客车段落 </p>  </div>”;

          alert(str.replace(reg,”"));

    </script>

            r.exec('1988-01-10');  

            s1 = RegExp.$1;  

    38、  截取字符串abcdefg的efg

    alert('abcdefg'.substring(4));   

            s2 = RegExp.$2;  

            s3 = RegExp.$3;  

    39、  列举浏览器对象模型BOM里常用的起码4个指标,并列举window对象的常用方法至少5个

    对象:window, document, location, screen, history, navigator

    方法:alert(),  confirm(),  prompt(),  open(),  close()

            alert(s1 "," s2 "," s3)   

    });  

    40、  Javascript创造对象的三种方法?

     

    1、var obj = {};(使用json成立对象)                                                                如:obj.name = '张三';                                                                                      ​obj.action = function (){alert('吃饭');}​;                                                                2、var obj = new Object();(使用Object制造对象)                                          如:obj.name = '张三';                                                                                      ​obj.action = function (){alert('吃饭');}​;                                                                3、​通过构造函数创制对象。                                                                        (1)、使用this关键字​如:                                                                              var obj = function (){                                                                                                    this.name ='张三';                                                                                                this.age = 19;                                                                                                      this.action = function (){                                                                                              alert('吃饭');                                                                                        }​;}                                                                                                                      ​(2)、使用prototype关键字如:                                                                            function obj (){                                                                                                  ​      obj.prototype.name ='张三';                                                                                ​obj.prototype.action=function (){                                                                              alert('吃饭');                                                                                            }}​;                                                                                                                        4、使用内置对象创设对象。                                                                        如:var str = new String("实例发轫化String");                                                          var str1 = "直接赋值的String";                                                                            var func = new Function("x","alert(x)");        //示例初叶化func                            var obj = new Object();        //示例开始化三个Object

    重回的结果:一九九零,01,10

    本文主固然对JavaSript的prototype属性使用体验举办总计,程序支付中太多时候大家习贯了“.”这些操作符,通过该操作符来引出对象放置的性质和方法,但是部分时候绝不及作者辈盼望的那么别人啥事都为我们希图好了,prototype属性让大家能在对象上自定义方法和品质。

    ...

    41、事件绑定和平日事件有啥分别

    一般性加多事件的法门:

    var btn = document.getElementById("hello");

    btn.onclick = function(){    alert(1);  }

    btn.onclick = function(){    alert(2);  }

    试行上边包车型客车代码只会 alert 2

    事件绑定形式丰硕事件:

    var btn = document.getElementById("hello");

    btn.addEventListener("click",function(){    alert(1);  },false);

    btn.addEventListener("click",function(){    alert(2);  },false);

    实践上边包车型地铁代码会先alert 1 再alert 2

    经常增加事件的秘技不支持增添七个事件,最下边包车型地铁事件会覆盖上边的,而事件绑定(add伊夫ntListener)格局丰裕事件能够加上八个。

    add伊芙ntListener不包容低版本IE

    一般来讲事件不可能收回

    add伊芙ntLisntener还协理事件冒泡 事件捕获           

    本文由新葡亰496net发布于新葡亰官网,转载请注明出处:面试题总结三,JavaScript中判断对象类型的几种方

    关键词: