`
linweibin
  • 浏览: 31728 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

for/in语句及in运算符的使用

阅读更多

   这篇博文时关于学习javascript中我一直很少使用的一个知识点,in运算符和for/in循环语句。这两个知识点都是和对象有关系,当然这个对象也包括数组。于是,参考了网上的部分资料,总结了使用过程中的一些技巧。

1. in运算符:要求其左边的运算数是一个字符串,或可以被转换为字符串(比如number等),右边的运算数是一个对象或数组。如果该运算符左边的值是右边对象的一个属性名,则返回true。

例如:


         var person={"name":"xxx","age":25,"sex":"men"}; //对象

 

var has_name="name" in person; //返回true
      var has_girlfriend="girlfriend" in person; //返回false
      var ts="toString" in person;//返回true,toString为自定义对象的继承方法
 


   2. for/in语句:语法,for (variable in object)
                            statement;
      提供了一种遍历对象属性的方法。

例:for(var prop in my_object) {
        document.write("name:"+prop+";value:"+my_object[prop],"<br>");
    }
      javascript的数组是一种特殊的对象,因此for/in循环可以像枚举对象属性一样枚举数组下标。
可以把一个对象的所有属性名复制到一个数组中,
例:var o= {x:1,y:2,z:3};
    var a=new Array();
    var i=0;
    for (a[i++] in o) 
    ;//空语句,用于初始化数组

    3. in运算符与for/in语句不同,for/in语句in的左边可以是声明一个变量的var语句,数组的一个元素或者是对象的一个属性,不能使字符串。

    4. 数组常用的存取属性运算符是“[]”,而不是“.”。使用“[]”来命名属性名师字符串值,是动态的,可以在运行时改变,而不是一个标识符“.”。

例:var stock_name= get_stock_name_from_user();//从用户处获取股票名
    var share= get_number_of_shares();//得到股票数量
    portfolio[stock_name]= share;//动态地创建数组股票,并为每支股票赋值
    将该例子与for/in循环一起使用,当用户输入了他的投资组合,可以计算当前总值
    var value= 0;
    for (stock in portfolio) {
       value +=get_share_value(stock)*portfolio[stock];
    }
stock存取的是每支股票的名字。      
portfolio[stock]存取的是每支股票的数量。

 

5.for/in的一个陷阱:

 

var Status = function(arg){
    this.arg = arg;
	}
	Status.prototype.getStatus = function(){
    return this.arg;
	}
	
	var instance = new Status('a test string');
	var value=instance.getStatus();
	//alert(value);
	instance.ooxx = 'ooxx';

	for(i in instance){
   
         document.write(i+"<br/>");
        }
 会输出结果:

 

arg
ooxx
getStatus

 

 

但这并不是我们想要的结果:我们通常只需要获得属性,而不需要获得对象的原型。解决办法如下

for(i in instance){

    if(instance.hasOwnProperty(i)){

         document.write(i+"<br/>");

}

}

也就是说遍历的时候使用hasOwbnProperty(property)来判断是否是属性,而过滤掉对象的函数和原型 

分享到:
评论

相关推荐

    js中将多个语句写成一个语句的两种方法小结

    if语句、while语句、do/while语句、for语句、for/in语句和function语句等语句后都只能跟随一个子语句,此时可以用{和}将多条语句围起来变成一个语句。  代码如下: if(username==null)   username = “guest”;...

    javascript文档

    for...in 语句t 对应于对象或数组中的每个元素执行一个或多个语句。 fromCharCode 方法 返回 Unicode 字符值的字符串。 Function 对象 创建一个新的函数。 function 语句 声明一个新的函数。 getDate 方法 使用...

    精通sql结构化查询语句

    10.1.5 使用子查询创建视图 10.2 使用IN语句的子查询 10.2.1 简单的IN语句子查询 10.2.2 使用IN子查询实现集合交运算 lO.2.3 使用IN子查询实现集合差运算 10.3 使用EXISTS语句的子查询 10.3.1 简单的EXISTS语句子...

    python 表达式和语句及for、while循环练习实例

    Python中表达式和语句及for、while循环练习 1)表达式 常用的表达式操作符: x + y, x - y x * y, x / y, x // y, x % y 逻辑运算: x or y, x and y, not x 成员关系运算: x in y, x not in y 对象实例测试: x is...

    建表语句+题目+答案+表.zip

    资源包括:19道SQL语句查询题目及答案、建表SQL语句、题目相关的表截图。答案中除了包含intersect、except关键词的答案,其余都在MySQL上跑过,确保运行无误(MySQL不支持intersect、except关键词),因为脑细胞死得...

    Python语言基础:pass语句.pptx

    实例:输出 Python 的每个字母 ...5下列运算符的使用错误的是? A 1+’a’ B [1,2,3]+[4,5,6] C 3*’abc’ D -10%-3 6下面代码的输出结果是? for i in range(3): print(2,end=',') A 2,2,2

    经典SQL语句大全

    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...

    javascript中使用未定义变量或值的情况分析

    本文实例讲述了javascript中使用...2. for in语句中: for(key in {name:'goofy'}){ alert&#40;key&#41; //"name" } alert&#40;key&#41; //"name" for in语句中in左边的变量如果没定义也会先定义 3. typeof运算符

    JScript 语言参考

    for...in 语句t 对应于对象或数组中的每个元素执行一个或多个语句。 fromCharCode 方法 返回 Unicode 字符值的字符串。 Function 对象 创建一个新的函数。 function 语句 声明一个新的函数。 getDate 方法 使用...

    微软JavaScript手册

    for...in 语句t 对应于对象或数组中的每个元素执行一个或多个语句。 fromCharCode 方法 返回 Unicode 字符值的字符串。 Function 对象 创建一个新的函数。 function 语句 声明一个新的函数。 getDate 方法 使用...

    精通SQL 结构化查询语言详解

    6.3.1 IN运算符的使用  6.3.2 IN运算符与OR运算符  6.4 NOT运算符 6.4.1 使用NOT运算符  6.4.2 NOT运算符与运算符  6.5 使用LIKE进行模糊查询 6.5.1 LIKE运算符  6.5.2 “%”通配符 6.5.3 “_”通配符...

    javascript语言参考+教程 CHM

    for...in 语句; function 语句; if...else 语句; Labeled 语句; return 语句; switch 语句; this 语句; throw 语句; try...catch...finally 语句; var 语句; while 语句; with 语句; FileSystemObject ...

    精通JavaScript

    第1章(\第1章) ...1.将该实例复制到C:\Inetpub\wwwroot下; 2.选择浏览器的“工具”-“安全”-“本地Intranet”-“自定义级别”-“活动脚本”中选用“禁用”单选框 ...• 6.25.htm for…in语句调用属性值

    精通SQL--结构化查询语言详解

    6.3.1 in运算符的使用 104 6.3.2 in运算符与or运算符 105 6.4 not运算符 106 6.4.1 使用not运算符 106 6.4.2 not运算符与[]运算符 108 6.5 使用like进行模糊查询 109 6.5.1 like运算符 109 6.5.2 “%”通配符...

    python基础2day01.txt

    in / not in 运算符 索引取值 索引赋值 切片取值 切片赋值 del 语句用于列表 del 变量 del 列表[索引/切片] 序列相关的函数: len(x) max(x) min(x) sum(x) any(x) all(x) 列表的方法: L.append(x) ...

    JavaScript学习笔记之基础语法

    JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括:  各种算术运算符、比较运算符、逻辑运算符;  if else语句、switch语句;  for循环、while循环、do ...2.for/in循环  JavaScri

    linux shell流程控制语句实例讲解(if、for、while、case语句实例)

    fi如果对于:条件测试语句不是很清楚,可以参考:linux shell 逻辑运算符、逻辑表达式详解shell命令,可以按照分号分割,也可以按照换行符分割。如果想一行写入多个命令,可以通过“’;”分割。如: 代码如下:...

    数据库操作语句大全(sql)

    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...

    Python复习题.docx

    加法 ,字符串联接, 数组融合 减法 * 乘法 , 字符串级联 / 实数除法 // 整除 % 求余数 ** 求幂 in 判断 元素是否在序列类型中 for x in 序列类型 : 序列类型遍历 and 并且 or 或者 not 不是 比较运算符: &lt; &gt; &lt;= &gt;= ...

    JavaScript 基础教程

    JavaScript实现,JavaScript语句放置,JavaScript语句,JavaScript注释,JavaScript变量,JavaScript运算符,JavaScript条件语句,JavaScript开关语句,JavaScript消息框,JavaScript函数,JavaScript For 循环,...

Global site tag (gtag.js) - Google Analytics