有哪些方法可以检测JSjs判断对象是否有属性存在属性重复

有哪些方法可以检测JS对象存在属性重复_百度知道
有哪些方法可以检测JS对象存在属性重复
我有更好的答案
&!DOCTYPE html PUBLIC &-//W3C//DTD XHTML 1.0 Transitional//EN& &http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&&
&title& New Document &/title&
&meta name=&Generator& content=&EditPlus&&
&meta name=&Author& content=&&&
&meta name=&Keywords& content=&&&
&meta name=&Description& content=&&&
&script type=&text/javascript&&
function lookProperty(obj){
ob=eval(obj);
var Property=&&;
for(var i in ob){
Property+=&属性:&+i+&&br/&&;
document.getElementById(&myp&).innerHTML=P
&div id=&myp&&&/div&
&button onclick=&lookProperty(currentStyle)&&查看属性&/but...
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁javascript检测对象中是否存在某个属性判断方法小结
字体:[ ] 类型:转载 时间:
检测对象中属性的存在与否可以通过以下几种方法来判断:使用in关键字、使用对象的hasOwnProperty()方法、用undefined判断、在条件语句中直接判断,感兴趣的朋友可以了解下哈
检测对象中属性的存在与否可以通过几种方法来判断。 1.使用in关键字该方法可以判断对象的自有属性和继承来的属性是否存在。
代码如下: var o={x:1}; "x" //true,自有属性存在 "y" //false "toString" //true,是一个继承属性
2.使用对象的hasOwnProperty()方法 该方法只能判断自有属性是否存在,对于继承属性会返回false。
代码如下: var o={x:1}; o.hasOwnProperty("x");    //true,自有属性中有x o.hasOwnProperty("y");    //false,自有属性中不存在y o.hasOwnProperty("toString"); //false,这是一个继承属性,但不是自有属性
3.用undefined判断 自有属性和继承属性均可判断。
代码如下: var o={x:1}; o.x!== //true o.y!== //false o.toString!==undefined //true
该方法存在一个问题,如果属性的值就是undefined的话,该方法不能返回想要的结果,如下。
代码如下: var o={x:undefined}; o.x!== //false,属性存在,但值是undefined o.y!== //false o.toString!==undefined //true
4.在条件语句中直接判断 代码如下: var o={}; if(o.x) o.x+=1; //如果x是undefine,null,false," ",0或NaN,它将保持不变
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具本文主要介绍判断JS对象是否拥有某种属性的两种方式,感兴趣的朋友可以借鉴下!
两种方式,稍微有区别
1,in 运算符
复制代码 代码如下:
var obj = {name:'jack'};&
alert('name' in obj); // --& true&
alert('toString' in obj); // --& true&
可看到无论是name,还是原形链上的toString,都能检测到返回true。
2,hasOwnProperty 方法&
复制代码 代码如下:
var obj = {name:'jack'};&
obj.hasOwnProperty('name'); // --& true&
obj.hasOwnProperty('toString'); // --& false&
原型链上继承过来的属性无法通过hasOwnProperty检测到,返回false。
需注意的是,虽然in能检测到原型链的属性,但for in通常却不行。
当然重写原型后for in在IE9/Firefox/Safari/Chrome/Opera下是可见的。
最新图文资讯
相关文章列表:
站长圈推荐文章
 -   -   -   -   -   - 莫道谗言似海深,莫言迁客似沙沉, 千淘万漉虽辛苦,吹尽黄沙始见金。--大道至简,知易行难
字号:大 中 小
要想看到实际效果,可以先声明一些属性跟方法,否则是看不到,仔细往下看有例子的。代码如下:function ShowObjProperty(Obj) { var PropertyList=''; var PropertyCount=0; for(i in Obj){ if(Obj.i !=null) PropertyList=PropertyList+i+'属性:'+Obj.i+'\r\n'; else PropertyList=PropertyList+i+'方法\r\n'; } alert(PropertyList); } 代码如下: &script type="text/javascript"& // 创建一个对象 myObject 以及三个属性 sitename, siteurl, sitecontent。 var myObject = new Object(); myObject.sitename = "布啦布啦"; myObject.siteurl = ""; myObject.sitecontent = "网页教程代码图库的中文站点"; //遍历对象的所有属性 for (prop in myObject) { document.write("属性 '" + prop + "' 为 " + myObject[prop]); document.write(" "); } &/script&
今天网上Java Tang博客找到了一个用来遍历JavaScript某个对象所有的属性名称和值的方法,这样想使用方法的时候非常的直观和方便。代码如下: 代码如下: /* * 用来遍历指定对象所有的属性名称和值 * obj 需要遍历的对象 * author: Jet Mah */ function allPrpos ( obj ) { // 用来保存所有的属性名称和值 var props = "" ; // 开始遍历 for ( var p in obj ){ // 方法 if ( typeof ( obj [ p ]) == " function " ){ obj [ p ]() ; } else { // p 为属性名称,obj[p]为对应属性的值 props += p + " = " + obj [ p ] + " \t " ; } } // 最后显示所有的属性 alert ( props ) ; }
AJAX的JavaScript的反射机制,反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。 在JavaScript中利用for(…in…)语句实现反射,其语法如下: for(var p in obj){ //语句 } 在Ajax编程中,经常要能动态的改变界面元素的样式,这可以通过对象的style属性来改变,比如要改变背景色为红色,可以这样写: element.style.backgroundColor="#ff0000"; 基本上CSS里拥有的属性在JavaScript中都能够使用: 代码如下: function setStyle(_style){ //得到要改变样式的界面对象 var element=getElement(); element.style=_ }
直接将整个style对象作为参数传递了进来: 代码如下: var style={ color:#ffffff, backgroundColor:#ff0000, borderWidth:2px }
这时可以这样调用函数: setStyle(style); 或者直接写为: setStyle({ color:#ffffff,backgroundColor:#ff0000,borderWidth:2px}); 这段代码看上去没有任何问题,但实际上,在setStyle函数内部使用参数_style为element.style赋值时,如果element原先已经有了一定的样式,例如曾经执行过: element.style.height="20px"; 而_style中却没有包括对height的定义,因此element的height样式就丢失了,不是最初所要的结果。要解决这个问题,可以用反射机制来重写setStyle函数: 代码如下: function setStyle(_style){ //得到要改变样式的界面对象 var element=getElement(); for(var p in _style){ element.style[p]=_style[p]; } }
程序中遍历_style的每个属性,得到属性名称,然后再使用方括号语法将element.style中的对应的属性赋值为_style中的相应属性的值。从而,element中仅改变指定的样式,而其他样式不会改变,得到了所要的结果。^-^
function open_phone(e) {
var context = document.title.replace(/%/g, '%');
var url = document.location.
open("/ishare.do?m=t&u=" + encodeURIComponent(url) + "&t=" + encodeURIComponent(context) + "&sid=70cd6ed4a0");
!觉得精彩就顶一下,顶的多了,文章将出现在更重要的位置上。
大 名:&&[]&&[注册成为和讯用户]
(不填写则显示为匿名者)
(您的网址,可以不填)
请根据下图中的字符输入验证码:
(您的评论将有可能审核后才能发表)
已成功添加“”到
请不要超过6个字js之Function原型 函数类型实际上是对象 具有属性和方法-android100学习网
js之Function原型 函数类型实际上是对象 具有属性和方法
在ECMAScript中,Function(函数)类型实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针。  1、三种函数声
在ECMAScript中,Function(函数)类型实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针。
  1、三种函数声明的方式
  1》第一种:普通方式声明函数
  1 function box (num1,num2){
  2 return num1+num2;
  2》第二种:使用变量初始化的方式:
  1 var box =function(num1,num2){
  2 return num1+num2;
  3》第三种:使用Function构造函数的方式
  1 var box =new Function(&num1&,'num2','return num1+num2');
  总结:第三种方式不推荐使用:因为要解析两次代码:第一次:解析常规的ECMAScript代码,第二次是解析传入构造函数中的字符串;所以影响性能。但是我们能从这种语法理解&函数是对象,函数名是指针&这个概念
  2、作为值的函数
  ECMAScript中的函数本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以传递参数一样把一个函数传递进另一个函数,而且也可以将一个函数作为另一个函数的结果返回。类似于 c# 中的 委托,令方法 像参数一样传递到另一个方法中。
  复制代码
  1 function box(sum,num){//将函数 以参数的 形式 传递进 另一个函数
  2 return sum(num); //将函数作为返回值 进行返回
  5 function sum(num){
  6 return num+10;
  8 alert(box(sum,10));//20
  复制代码
  3、函数内部的属性
  在函数内部,有两个特殊的对象:arguments和this。arguments 是一个 类数组对象,包含着传入函数中的所有参数,主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个 arguments对象的函数。
  arguments属性的使用:
  复制代码
  1 function box(){
  2 alert(arguments.length);
  3 for(var i=0;i
  4 alert(arguments[i]); //取到每一个传进来的参数
  8 box(1,2,3,4);
  复制代码
  callee属性(是arguments的属性)
  复制代码
  1 //使用arguments.callee代替 自己
  2 function sum(num){
  3 if(num&=1){
  4 return 1;
  6 else{
  7 return num * arguments.callee(num-1);
  10 alert(sum(4));//24
  复制代码
  this对象:
  和c#中的this大致相似。this对象引用的是函数以执行操作的对象,或者说函数调用语句所处的那个作用域。
  PS:当在全局作用域中调用函数时,this对象引用的就是window。
  复制代码
  1 var color='红色';
  2 alert(window.color);//红色 只要是全局作用域内的对象 就是 window下
  3 alert(this.color)//红色 this位于全局作用域下,this引用的就是window对象
  4 alert(color);//红色 可以省略 window直接输出
  6 window.color='蓝色'; //等价于:var color='蓝色';
  7 alert(this.color);//蓝色
  8 alert(color);//蓝色
  复制代码
  this对象的经典的例子:
  复制代码
  1 var box={
  2 color:'红色',
  3 SayColor:function(){
  4 alert(this.color); //this对象 指向的此作用域 范围内的 对象的引用(就是box的引用)
  7 box.SayColor();
  9 window.color='红色';
  10 function SayColor(){
  11 alert(this.color);//因为此方法位于 window下面,所以 方法内的this引用指向 window
  14 SayColor();//红色
  16 var box={
  17 color:'蓝色的'
  19 box.SayColor=window.SayC //赋值之后,SayColor中的this对象 指向 当前的 作用域 也就是 box对象
  20 box.SayColor();//蓝色的
  复制代码
  4、匿名属性和方法
  ECMAScript中的函数式对象,因此函数也有属性和方法。每个函数都含有两个属性:length和prototype。其中,length表示函数希望接收的命名参数的个数
  PS:prototype属性:它是保存所有实例方法的真正所在,也就是原型。这个属性。我们将在面向对象一章详细介绍。而prototype 下有两个方法:apply()和call(),每个函数都包含这两个 非继承 而来的方法。这两个方法的用途都在特定的作用域中调用函数,实际上等于设置函数体内this对象的值
  length属性:
  1 function sum(num1,num2){
  2 return num1+num2;
  4 alert(sum.length);
  apply()方法:
  复制代码
  1 function sum(num1,num2){
  2 return num1+num2;
  5 function num(num1,num2){
  6 //第一个参数:此方法要执行的作用域(就是这个方法执行的作用域),第二个参数是 要传递到sum函数中的参数
  7 return sum.apply(this,[num1,num2]); //参数数组[num1,num2]可以使用 arguments替换
  10 alert(num(10,10));
  复制代码
  call()方法:
  call()方法执行的效果和apply是一样的,不同之处是:他们之间传递参数的方式的不同
  1 function box(num1,num2){
  2 return sum.call(this,num1,num2);//从第二参数开始想函数内传递参数,而不是传递一个参数数组
  3 //其实可以直接 调用函数,上面做法只是演示一下 apply 和call的用法
  6 alert(box(1,2));
  call()和apply()方法的真正的用武之地不是上面(因为上面实现没意义),而是:改变方法的作用域,冒充方法的调用者进行调用方法,解决的是 对象之间的 &耦合&,降低了 耦合度
  复制代码
  1 var color='红色';
  3 function SayColor(){
  4 alert(this.color);
  6 SayColor();//红色
  8 var box={
  9 color:'蓝色'
  12 SayColor.call(box);//蓝色 (改变了 方法的 作用域,但是没有 使用 box.SayColor=SayC(耦合度太高了),降低了耦合度) 在运行call(box)方法的时候,SayColor()的运行环境已经变成了box对象里了。
  13 SayColor.call(this);//红色
  14 SayColor.call(window);//红色
  16 box.Say();
  复制代码
  call()和apply()方法的最大好处:扩充作用域,并且 对象和方法之间不用发生任何的 耦合 关系

我要回帖

更多关于 js判断对象是否有属性 的文章

 

随机推荐