一些js方法

isIE: navigator.appVersion.indexOf("MSIE") != -1 ? true: false,

 

1:在页面中插入一段js

1
2
3
4
5
6
7
8
9
(function(d){
        var t=d.createElement("script");
        t.type="text/javascript"
        t.async=true;  
        t.id="js-1";
        t.setAttribute("params","param1");
        t.src=("https:"==d.location.protocol?"https://s":"http://a")+".cn/ji-1.js";
        d.getElementsByTagName(‘head‘)[0].appendChild(t);
    })(document);

d指的是document;asfasas

t.src=("https:"==d.location.protocol?"https://s":"http://a")+".cn/ji-1.js";d.location.protocol指的是网络协议,如果协议为https,那么值为"https://s",否则前缀为"http://a";

2:substr和substring的区别;

  substr(a,b):从a开始取,取b个长度;

  substring(a,b):从a开始取到b;

3:

  

$: function(objName) {
        if (document.getElementById) {
            return eval(‘document.getElementById("‘ + objName + ‘")‘)
        } else {
            return eval(‘document.all.‘ + objName)
        }
    },

 4:判断IE浏览器

isIE: navigator.appVersion.indexOf("MSIE") != -1 ? true: false,

 5:attachEvent和addeventListerner

  

<script>
             function method1(){alert("method1");}
             function method2(){alert("method2");}
             function method3(){alert("method3");}
            <span style="color: rgb(255, 0, 0);"> /*所有浏览器都支持,但是只能打印出method3*/</span>
             document.getElementById("btn").onclick = method1;
             document.getElementById("btn").<span style="color: rgb(255, 0, 0);">onclick</span> = method2;
             document.getElementById("btn").onclick = method3;
             var btn1Obj = document.getElementById("btn2");
            <span style="color: rgb(255, 0, 0);"> /*attachEvent只有IE支持,弹出顺序为 2-3-1 理论上yingga应该是3-2-1啊啊啊啊!!!!!!*/</span>
             btn1Obj.attachEvent("onclick",method1);
             btn1Obj.attachEvent("<span style="color: rgb(255, 0, 0);">onclick</span>",method2);
             btn1Obj.attachEvent("onclick",method3);
            <span style="color: rgb(255, 0, 0);"> /*addEventListener只有ff.chrome支持,弹出顺序为 1-2*/</span>
             btn1Obj.addEventListener("<span style="color: rgb(255, 0, 0);">click</span>",method1,false);
             btn1Obj.addEventListener("click",method2,false);
             btn1Obj.addEventListener("click",method3,false);
       </script>

 so兼容方法如下 

addEvent: function(l, i, I) {
        if (l.attachEvent) {
            l.attachEvent("on" + i, I)
        } else {
            l.addEventListener(i, I, false)
        }
    },
    delEvent: function(l, i, I) {
        if (l.detachEvent) {
            l.detachEvent("on" + i, I)
        } else {
            l.removeEventListener(i, I, false)
        }
    },

  

function addEvent(el, type, fn){
    if (w.addEventListener){
        el.addEventListener(type, fn, false);
    } else if (w.attachEvent){
        var f = function(){
          fn.call(el, w.event);
        };         
        el.attachEvent(‘on‘ + type, f)
    }
}

 6: js重载解决方案

  6.1:JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?

  6.2:arguments.length判断

  6.3:根据参数类型重载,判断变量类型的3种方法:
    1.用 typeof 语句判断变量类型,typeof语句返回类型对应的字符串。"string","function","array","object","boolean","number","object(未定义也返回object)"
    2.用 instanceof 语句判断变量类型,instanceof语句返回true/false。
    3.用 constructor 属性判断变量类型,这个属性返回用来构造该变量的构造函数引用。String,Function,Array,Object,Boolean,Number,User Define

    可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判断。

  

<script type="text/javascript">
function add() 
{
    if (arguments.length == 0) return 0;
    var sum=0;
    for(var i=0; i<arguments.length; i++){
        if(arguments[i].constructor == Number){
        //或者改为:if(arguments[i] instanceof Number)
        //或者改为:if(typeof(arguments[i])=="number")
        sum += arguments[i];
      }
    }
    return sum;
}
//函数调用
alert(add(10));
alert(add(10,20));
</script>

 

  

 

 

 

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。