彩世界开奖app官网-彩世界平台官方网址(彩票平台)
做最好的网站
来自 彩世界平台官方网址 2019-11-28 05:52 的文章
当前位置: 彩世界开奖app官网 > 彩世界平台官方网址 > 正文

js中有关IE版本检测_javascript技巧_脚本之家【彩世

原始

以此类推,可以获得各个版本的信息,甚至可以添加gt,gte等,从而一次判定一类版本。
关于这种写法,有个例子就是:

  console.log(test.name);

测试

上面的问题大家应该看出来了,IE7下两种情况不一致,不知道是我的IE7兼容模式的问题还是别的什么原因,知道的请指教。
确认代码:

 

IE6结果:

var ieVersion = (function(){ return document.getElementById('ieVersion')})();

  return a b;  

IE7结果:

复制代码 代码如下:

test(1,2,3)//3,2

见得最多的就是检测navigator.userAgent。 另外一种就是IE的条件注释,这篇有个比较详细的说明 //www.jb51.net/article/29336.htm复制代码 代码如下:

复制代码 代码如下:

  if(count <=  0){

在IE9下结果:IE9 在IE8下结果:IE8 在IE7下结果:IE7 在IE6下结果:IE6 按理来说,对于FF,Chrome/Safari、opera都可以利用-moz、-webkit、-o等私有前缀来辨别,不过对于属性的选取要斟酌,类似color是不行的。 这个检测方法旁门左道而已,未来版本或者其他浏览器是不是有这个bug也不确定,而且IE7的那个bug我还没有弄清楚,所以也就暂时知道可以这么做就可以了。

复制代码 代码如下:

参数:0个数:1 

基本原理和IE的条件注释差不多,我们一次检测color值就可以了,所以改变一下上面的例子就是: 复制代码 代码如下:

复制代码 代码如下:

 

在IE9下结果:LOG: test_1:yellow----test_2:yellow 在IE8下结果:LOG: test_1:#ff6600----test_2:#ff6600 在IE7下结果:LOG: test_1:green----test_2:blue 在IE6下结果:test_1:blue ----test_2:blue (IE6没有console.log,所以上面的console.log需要换成alert) 上面的问题大家应该看出来了,IE7下两种情况不一致,不知道是我的IE7兼容模式的问题还是别的什么原因,知道的请指教。 确认代码: 复制代码 代码如下:

按理来说,对于FF,Chrome/Safari、opera都可以利用-moz、-webkit、-o等私有前缀来辨别,不过对于属性的选取要斟酌,类似color是不行的。
这个检测方法旁门左道而已,未来版本或者其他浏览器是不是有这个bug也不确定,而且IE7的那个bug我还没有弄清楚,所以也就暂时知道可以这么做就可以了。

//定义一个对象

<!--[if IE 6]>
<input type="hidden" id="ieVersion" value="6" />
<![endif]-->
<!--[if IE 7]>
<input type="hidden" id="ieVersion" value="7" />
<![endif]-->

}

彩世界平台官方网址 1

function sum(a,b){

<div id="test_1"><span style="color: red; color: #ff6600\0; color: yellow9\0; *color:green; _color:blue;">测试</span></div>
<script type="text/javascript">
var test_1 = document.getElementById('test_1');
var test_2 = document.createElement('div');
test_2.innerHTML = '<span style="color: red; color: #ff6600\0; color: yellow\9\0; *color:green; _color:blue;">测试</span>';
console.log('test_1:' test_1.firstChild.style.color '----' 'test_2:' test_2.firstChild.style.color);
</script>

这种方式和C语言中的很类似,这种是最常见的一种创建函数的方法。是通过关键字function直接声明,请看

另外一种就是IE的条件注释,这篇有个比较详细的说明 ...

内部属性

<!--[if !IE]><!-->
<script type="text/javascript">
alert('非IE')
</ script>
<!--<![endif]-->

*/

在IE9下结果:IE9
在IE8下结果:IE8
在IE7下结果:IE7
在IE6下结果:IE6

}

基本原理和IE的条件注释差不多,我们一次检测color值就可以了,所以改变一下上面的例子就是:

not重载

<div><span style="*color:red; _color:blue;">原始</span></div>
<script>
var test = document.createElement('div');
test.innerHTML = '<span style="*color:red; _color:blue;">动态生成</span>';
document.body.appendChild(test);
</script>

function testD(count){

<!--[if IE 6]>
<html class="ie6">
<![endif]-->
<!--[if IE 7]>
<html class="ie7">
<![endif]-->
<!--[if !IE]><!-->
<html><!--<![endif]-->

复制代码

彩世界平台官方网址 2

这两个方法作用是一样的,就是改变this作用域的值,在特定的作用域中调用自己,也就是设置this的指向,不同点在于参数接收方式不同。apply方法需要两个参数,第一个是指定的作用域,就是要把this指向的对象,第二个是参数数组,函数调用需要的参数,这个参数数组也可以是arguments这个伪数组。call的第一个参数也是给this绑定的值,其他的参数个数不定,其他的参数就是函数调用需要的参数,和apply不同,你要一个一个的都列举出来。看例子

复制代码 代码如下:

test();//0,2

基于IE的条件注释,变种版本就有几种,
第一、类似下面的形式:

复制代码

我测试的结果是这种形式是可用的。唯一需要注意的是<!-- [if IE 8]> 中'IE'和'8'中间的这个空白符是必须的,掉了就悲剧了。

 

于是在CSS里面就可以不用别的hack了,从而避免在IE里面多加载一次CSS,
直接

Array.apply(this, arguments); //没用过

.ie6 xx{}
.ie7 xx{}
.ie8 xx{}
xx{}

 

复制代码 代码如下:

这个属性比较简单,就是表示定义函数时定义的参数的个数,要和arguments.length区分开,arguments.length表示实际输入的参数个数,看例子

IE7结果:

}

在IE9下结果:LOG: test_1:yellow----test_2:yellow
在IE8下结果:LOG: test_1:#ff6600----test_2:#ff6600
在IE7下结果:LOG: test_1:green----test_2:blue
在IE6下结果:test_1:blue ----test_2:blue (IE6没有console.log,所以上面的console.log需要换成alert)

console.log(test(1,2));

第二、既然可以写在页面内,当然也可以JS来动态生成。我google了一把,发现还真有人这么做的。
文章地址如下:
不过这样的缺憾就是把条件注释限定到JS上了,于CSS就是鸡肋了。
继续,既然可以动态生成条件注释来辨明IE版本,基于IE的CSS hack,应该也可以动态生成一段html片段,用样式值来判定版本。
下面是最容易想到的形式,我测试发现这么确实可以,不过也发现了一个问题,看下面的一段代码:

function pop(color){

复制代码 代码如下:

递归3

见得最多的就是检测navigator.userAgent(这个可以面向所有浏览器,略过)。

函数属性和方法

另外一种就是IE的条件注释,这篇有个比较详细的说明

console.log(callSum1(1,2));

IE6结果:

function pop(color){

复制代码 代码如下:

复制代码

<div id="test_1"><span style="color: red; color: #ff6600\0; color: yellow9\0; *color:green; _color:blue;">测试</span></div>
<script type="text/javascript">
var test_1 = document.getElementById('test_1');
//var test_2 = document.createElement('div');
//test_2.innerHTML = '<span style="color: red; color: #ff6600\0; color: yellow\9\0; *color:green; _color:blue;">测试</span>';
var c = test_1.firstChild.style.color;
alert(c=='red'?'other':c=='yellow'?'IE9':c=='#ff6600'?'IE8':c=='green'?'IE7':'IE6');
</script>

arguments

函数在任何一种编程语言中都是一个很重要的结构或者组成部分,编程中的复杂结构和功能都会有函数的参与。javascript中的函数是一个对象,函数对象时Function类型的实例,由于Function类型是一个引用类型,那么函数可以拥有自己的方法和属性,同时也因为函数是一个对象,那么函数名是一个指向函数对象的指针,可以被赋值。下面详细介绍函数的各个部分。

call和apply

console.log(test(1,2));//3

我在上一篇【javascript基础】基本概念中介绍了javascript的一些基本概念,多谢大家的阅读和意见,自己写的东西可以被大家阅读,真心高兴,刚开始发布的时候我一直盯着阅读人数,虽然知道大家可能就是点开一下而已,但是还是给我一些继续写下去的信心。那今天写一些关于javascript函数的一些知识,帮助大家熟悉或者复习一些函数的基本知识。

参数:2个数:1

test(1,2)//2,2

参数:1个数:1

上面的代码就是创建一个函数,使用test()进行调用。其实,上面的代码是先创建了一个匿名的函数,之后把这个匿名的函数赋值给test变量。每个函数有一个name属性,这个属性不是ECMA标准的一部分,但是许多地方可以使用它。我们可以给上面的函数起一个名字,具体下面代码

复制代码

  return a b;      

console.log(test(0,0));//100

pop();//相当于window.pop();输入"red"

name属性的使用和arguments.callee()的效果是一样的,只不过arguments.callee()更方便些,当函数名字更改时程序不用更改。

test(3);

这里说一下函数的属性和方法,包括length,name,prototype,apply,call这几个。

var color = "red";//相当于window.color = "red"

function test(a,b){//会被函数表达式覆盖

区别

//调用函数

  console.log("第二个参数:" arguments[1]);

People.prototype.home = "jilin";

递归1

 

//创建函数(函数申明方式)

复制代码

//修改name属性

this

复制代码

 

复制代码

//  return a b;  

      console.log("递归" count " 结束了");

复制代码

//obj对象增加一个方法,将pop赋值给它

}

 console.log("参数:" arguments[0] "个数:" arguments.length);  

//调用函数

这个属性在前面提到了一点,这个就是函数的名字,我们在创建函数的时候说了这个属性,这个属性不是标准属性,但是很多地方就使用这个属性,主要也是在递归调用上使用。name属性是只读属性,不能修改它的值。直接看例子

Function构造函数

 

/*

复制代码

//这里可以遍历取得所有的参数,不讲了

  alert(this.color);

  return a b -100;

复制代码

函数的内部有两个重要的对象:arguments和this。

//prototype中的属性

函数

 

console.log(test(1,2));//3

testD(3);

 javascript中的this和java中的this差不多,this引用的是函数的执行环境,就是this在不同的执行环境中引用的是不同的对象,执行环境这里还没有说到,以后会详细介绍,这里的this也是简单的介绍一下,我以后会整理一些面试题,帮助大家理解。看例子吧,

  console.log(test.name);

arguments有一个length属性,表示函数传入参数的个数,还有一个callee属性,这是一个指针,指向拥有这个arguments的函数,这个主要是在函数内部调用自己时使用,也就是递归时使用。看个例子就明白了

  this.name =  name;

 

//全局变量

}

}

var test = function newName(a,b){

PS:最近jQuery源码交流群( 239147101)加了不少热新人,希望大家还是以学习为主,尽量少灌水,给大家一个好的提升自己的环境。

 

pop.call(obj);//blue

 

Array.prototype.slice.call(arguments);

 

function test(count){

这个属性在后面详细解释吧。

}

  return sum.apply(this,[a,b]);  

 console.log("参数:" arguments[0] "个数:" arguments.length);  

 

var obj = {color : "blue"};

复制代码

console.log(callSum2(1,2));

//函数内部使用name属性,递归调用

函数声明

函数的prototype属性是一个很重要的属性,特别是在自定义引用类型和实现继承时。我们现在这简单的介绍一下它,因为这个属性足以单独写一篇文章。我们可以认为prototype是一个模板,在new 一个对象时候会参照这个模板,将模板里的属性和方法复制给对象,当然你不定义这个模板,这个模板不存在方法和属性。简单例子

console.log(nTest.name);//undefined

     }  

var color = "red";//相当于window.color = "red"

复制代码

 

  if(count <=  0){

 

复制代码

}

function callSum3(a,b){

  return a b;  

}

//创建函数(函数表达式方式)

function test(a,b){

  return a b;  

var ntest = function (a,b){

上面是传递参数的例子,再看看改变this指向的例子

复制代码

var test = function (a,b){

console.log(callSum3(1,2));

function test(){

}

  console.log("输入的参数个数:" arguments.length);

        console.log("递归" count);

pop();//相当于window.pop();输入"red"

function testA(c){

  console.log("输入的参数个数:" arguments.length);

console.log(test.name);//test

//函数的名字newName

 

 

函数表达式

}

解释一下,this这个对象是在函数执行时才绑定的,可以说是一个动态的。pop函数是定义在window下的一个函数,也就是全局作用域的一个函数,当直接执行pop函数时,就是在全局作用域下调用pop时。this引用的是window,this.color就是window.color,输出red。当我们把pop这个函数赋值给obj这个对象并且调用pop的时候,this引用的就是obj这个对象,this.color 就是obj.color,输出blue。

复制代码

  return a b;  

先简单介绍到这,后面单独详细说。

 

var hainan = new People("hainan");

参数:3个数:1

  return a b;  

复制代码

 

//arguments参数

参数:0个数:1

  return sum.call(this,a,b);  

}

我们可以看出比较的麻烦,并且《javascript高级程序设计》也不推荐我们使用这种方式,主要是因为浏览器要解析常规的javascript代码之外,还要解析传入的参数字符串,这个类似eval()的解释,影响性能。

}

 

      console.log("递归" count " 结束了");

console.log(hainan.home);//jilin

  console.log("定义的参数个数:" test.length);

  return sum.apply(this,arguments);  

//匿名函数

}

  return a b 100;  

参数:1个数:1

//}

 

function test(a,b){//会被下面的函数覆盖

 

递归1

pop.call(this);//red

}

  }else{

name

 

  alert(this.color);

function test(a,b){

  console.log("定义的参数个数:" test.length);

}

}

 

 

  return a b;  

 

 

console.log(test(1,2));//3

 

 

 

 

  }else{

复制代码

//下面的函数覆盖上面的

console.log(test(0,0));//-100

 

var test = function(a,b){

}

递归2

以上介绍了三个创建函数的方式,现在介绍三种的区别,确切的说是后两种的区别,因为Function不推荐使用,性能是一大原因。区别就是使用函数声明这种方式会使函数的声明提前,类似前面我们提到的变量申明的提前。也就是说,使用函数申明方式,我们可以将函数的声明放在调用函数代码的后面,因为解析器会在代码执行之前将函数的声明提升,提到源代码树的顶部,而函数表达式方式则会报错,具体请看

var nTest = function (a,b){

解释一下,pop.call(this)这句代码改变了this的指向,因为是在全局中调用的函数,this指向window,输出window.color。pop.call(obj)这句代码将this指向了obj,所以输出obj.color。

复制代码

 

prototype

  test.name = "newName";

var test = new Function("a","b","return a b");//参数a和b,函数体return a b

javascript语言不像java那些语言有函数重载这一概念,其实函数名就是一个指针,指向一个Function实例的地址,当然只能指向一个函数,当然没有重载的概念了,只有覆盖,后面定义的函数覆盖前面定义的函数,具体请看

我在上一篇【javascript基础】基本概念中介绍了javascript的一些基本概念,多谢大家的阅读和意见,自己写的东西可以被大家阅读,真心...

//function test(a,b){

}

 

var obj = {color : "blue"};

 

参数:3个数:1

  return a b;  

//列举所有参数

 

参数:2个数:1 

这种方式是创建的常见方式之一,具体请看

 

 

}

也就是说如果一个同名的函数表达式和函数申明的函数在一起,无论位置是怎么样的,最后的函数就会是用函数表达式创建的函数,因为函数申明会提升到顶部嘛,看看下面的代码

创建函数

function callSum1(a,b){

obj.pop(); //输出"blue"

test(1);//1,2

 

}

        console.log("递归" count);

arguments是一个类似组对象,包含所以传入函数的所有参数, 写程序或者面试中常问的就是如何将arguments转化完成一个数组,请看

/*

  return a b 100;  

console.log(ntest(1,2));//TypeError: undefined is not a function

console.log(test.name);//newName

递归2

function test(a,b){

}

 

 

//数组参数

//创建函数(函数申明方式)

     }  

这种方式是直接new出来一个Function 实例,通过使用Function的构造函数进行创建函数。Function构造函数可以接收任意多个参数,但是最后一个参数会被认为是函数体,前面的所以参数被当做被创建出来的函数的参数。

testA(1,100);2,2,100

//定义一个对象

function callSum2(a,b){

*/

obj.pop = pop;

//上面的函数相等于

Array.prototype.slice.call(arguments,0);

//全局变量

复制代码

递归3

test();//test,test

 

 

function test(a,b){

复制代码

  return a b;  

 

 

Array.apply(null, arguments); //没用过

前言

}

复制代码

        arguments.callee(--count);//调用自己

 

function People(name){

 

  //修改name属性

//console.log(test(1,2));//3

函数的创建有三种方式,分别为使用Function的构造函数、函数声明、函数表达式,下面分别介绍这三种方法。

复制代码

Array.prototype.slice.call(arguments,0,arguments.length);

function test(a,b){

递归0 结束了 

length

 

递归0 结束了

        testD(--count);//调用自己

//函数的内部我们可以通过arguments[i],取得输入的参数,假如定义一个参数,输入两个参数,那怎么取得第二个参数呢

本文由彩世界开奖app官网发布于彩世界平台官方网址,转载请注明出处:js中有关IE版本检测_javascript技巧_脚本之家【彩世

关键词: 技巧 脚本 版本 之家