在 javascript 判断类型中,有多少种不同类型的循环

javascript中的循环语句for语句深入理解
字体:[ ] 类型:转载 时间:
for循环是多数语言都有的。在javascript中,for循环有几种不同的使用情况,下面为大家一一介绍下
程序实现中经常要用到循环语句,其中for循环是多数语言都有的。在javascript中,for循环有几种不同的使用情况,下面就分别来讲述我的理解。 第一种:(通常情况,循环执行相关操作)
代码如下: var objA=document.getElementsByTagName("a"); var i, for(i=0,max=objA.i&i++){ objA[i].onclick=function(){ alert(this.innerHTML); } }
循环,依次注册超链接标签的单击操作 第二种:(针对对象,操作对象内容)
代码如下: var person={name:'wmhello',age:'28'}; var tips=''; for(var obj in person){ tips+=obj+'--&'+person[obj]+'\n' } alert(tips)
第三种:(常用于数组,对数组执行特定的操作)
代码如下: var num=[1,3,5]; var total=0; num.forEach(function(e){ total+=e; }); alert(total);
此forEach循环在firefox和chrome中有效
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具javascript中的for in 循环跟for 循环到底有什么区别啊?_百度知道JS创建对象几种不同方法详解
1、工厂模式
弊端:没有解决对象的识别问题,即怎么知道一个对象的类型。
2、构造函数模式
与工厂模式相比:
1、没有显式的创建对象
2、直接将属性和方法赋给了this对象
3、没有return语句
要创建person的实例,必须使用new操作符,以这种方式调用构造函数实际上会经历4个步骤:
1、创建一个新对象
2、将构造函数的作用域赋给新对象
3、执行构造函数中的代码
4、返回新对象
创建自定义的构造函数可以将它的实例标识为一种特定的类型。
构造函数的缺点:
每个方法都有在每个实例上重新创建一遍。person1和person2都有一个sayName()的方法,但两个方法不是同一个Function实例。不同实例上的同名函数是不相等的。
创建两个完成同样任务的Function实例没有必要,而且还有this对象在,不需要在执行代码前就把函数绑定在特定对象上,可以像下面这样。
把sayName属性设置成全局的sayName函数,这样,由于sayName包含的是一个指向函数的指针,因此person1和person2对象就共享了同一个函数。
但是,如果对象需要定义很多方法,那么就要定义很多全局函数,自定义的引用类型也没有封装可言了。为了解决上述问题,引入原型模式。
3、原型模式
理解原型对象
我们创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。prototype是通过调用构造函数而创建的那个对象实例的对象原型,使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法。
首先,解析器会问实例person1是否有name属性,如果有,就返回。
如果没有,就继续去person1的原型中搜索name属性,如果有就返回。
如果没有,再继续向person1的原型的原型中搜索。
isPrototypeOf()确定实例和原型对象之间的关联
console.log(Person.prototype.isPrototypeOf(person1)); //true
Object.getPrototypeOf()返回的是[[prototype]]的值
console.log(Object.getPrototypeOf(person1));
//Person {name: &Yvette&, age: 26, job: &engineer&} 返回的是Person的原型对象。
console.log(Object.getPrototypeOf(person1) === Person.prototype)//true
console.log(Object.getPrototypeOf(person1).name);//&Yvette&
hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中,只有给定属性存在于实例中,才会返回true。
console.log(person1.hasOwnProperty(&name&));//false
原型与in操作符
有两种方式使用in操作符:单独使用和在for-in循环中使用。单独使用时,in操作符会在通过对象能够访问给定属性时返回true,无论该属性在于实例中还是原型中。
使用for in循环,返回的是所有能够通过对象访问的、可枚举的属性,其中既包括实例中的属性,也包括存在于原型中的属性。如果实例中的属性屏蔽了原型中不可枚举的属性,那么也会返回。IE9之前的版本实现上有一个Bug,屏蔽不可枚举属性的实例属性不会在for-in中返回。
在IE9之前的吧按本中没有log信息。尽管person实例中的toString()方法屏蔽了原型中的不可 枚举的toString();
这导致了person1.constructor不再指向Person,而是指向了Object。如果constructor很重要,则需要特意将其设为适当的值,如:
但是这种方式会导致constructor属性变成可枚举。
如果想设置为不可枚举的(默认不可枚举),可以使用Object.defineProperty(Person.prototype, &constructor&, {
enumerable: false,
value: Person
原型的动态性
由于在原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来。
如果重写整个原型对象,情况就不一样了。调用构造函数时会为实例添加一个指向最初原型的[[prototype]]指针,而把原型修改为另外一个对象就等于切断了构造函数与最初原型之间的联系。实例中的指针仅指向原型,而不指向构造函数。
person.prototype指向的是原本的原型对象,而不会指向新的原型对象。
原型对象的问题
原型模式最大问题是由其共享的本性所导致的。
对于包含引用类型值的属性来说,问题较为突出
本意只想修改person1的friends,但是却导致person2的friends属性值也改变了。因此我们很少单独使用原型模式。
4、组合使用构造模式和原型模式
创建自定义类型的最常用的方式,就是组合使用构造函数模式与原型模式。构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性,这样每个实例都有自己的一份实例属性的副本,又同时共享着对方法的引用,最大限度的节省了内存。
除了以上几种方式以外,另外还有动态原型模式,寄生构造模式和稳妥构造模式,但是鉴于使用频率较低,不再赘述。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'javascript中for/in循环及使用技巧
字体:[ ] 类型:转载 时间:
如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的,本篇文章给大家介绍javascript中for/in循环及使用技巧 ,需要的朋友可以参考下
JavaScript 支持不同类型的循环:
for - 循环代码块一定的次数
for/in - 循环遍历对象的属性
while - 当指定的条件为 true 时循环指定的代码块
do/while - 同样当指定的条件为 true 时循环指定的代码块
1. in运算符:要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数是一个对象或数组。如果该运算符左边的值是右边对象的一个属性名,则返回true。
var point={x:1,y:2}; //对象直接量
var has_x="x" //返回true
var has_z="z" //返回false
var ts="toString"//返回true,toString为继承方法
&& 2. for/in语句:语法,
for (variable in object)
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&& 提供了一种遍历对象属性的方法。
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();
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]=//动态地创建数组股票,并为每支股票赋值
将该例子与for/in循环一起使用,当用户输入了他的投资组合,可以计算当前总值
var value= 0;
for (stock in portfolio) {
value +=get_share_value(stock)*portfolio[stock];
stock存取的是每支股票的名字。&&&&&
portfolio[stock]存取的是每支股票的数量。
for-in循环
功能:遍历对象属性,把属性名和属性值都提出来
var obj = {
"key1":"value1",
"key2":"value2",
"key3":"value3"
function EnumaKey(){
for(var key in obj ){
alert(key);
function EnumaVal(){
for(var key in obj ){
alert(obj[key]);
EnumaKey(obj)
//key1 key2 key3
EnumaVal(obj)
//value1 value2 value3
数组也可以这样遍历,但不推荐,因为不能保证顺序,而且如果在Array的原型上添加了属性,这个属性也会被遍历出来。
for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。
从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的。因为如果数组对象已被自定义的功能增强,就可能发生逻辑错误。另外,在for-in中,属性列表的顺序(序列)是不能保证的。所以最好数组使用正常的for循环,对象使用for-in循环。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具js For 循环语句的使用及for语法讲解-js教程-ab蓝学网
js For 循环语句的使用及for语法讲解
简介:WEB前端|循环可以将代码块执行指定的次数。JavaScript循环如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。
循环可以将代码块执行指定的次数。
JavaScript 循环
如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。
我们可以这样输出数组的值:
document.write(cars[0] + &&br&&);
document.write(cars[1] + &&br&&);
document.write(cars[2] + &&br&&);
document.write(cars[3] + &&br&&);
document.write(cars[4] + &&br&&);
document.write(cars[5] + &&br&&);
不过通常我们这样写:
for (var i=0;i&cars.i++)
document.write(cars[i] + &&br&&);
不同类型的循环
JavaScript 支持不同类型的循环:
for&- 循环代码块一定的次数
for/in&- 循环遍历对象的属性
while&- 当指定的条件为 true 时循环指定的代码块
do/while&- 同样当指定的条件为 true 时循环指定的代码块
for 循环是您在希望创建循环时常会用到的工具。
下面是 for 循环的语法:
for (语句 1; 语句 2; 语句 3)
被执行的代码块
语句 1&在循环(代码块)开始前执行
语句 2&定义运行循环(代码块)的条件
语句 3&在循环(代码块)已被执行之后执行
for (var i=0; i&5; i++)
x=x + &The number is & + i + &&br&&;
从上面的例子中,您可以看到:
Statement 1 在循环开始之前设置变量 (var i=0)。
Statement 2 定义循环运行的条件(i 必须小于 5)。
Statement 3 在每次代码块已被执行后增加一个值 (i++)。
通常我们会使用语句 1 初始化循环中所用的变量 (var i=0)。
语句 1 是可选的,也就是说不使用语句 1 也可以。
您可以在语句 1 中初始化任意(或者多个)值:
for (var i=0,len=cars.i& i++)
document.write(cars[i] + &&br&&);
同时您还可以省略语句 1(比如在循环开始前已经设置了值时):
var i=2,len=cars. for (; i& i++)
document.write(cars[i] + &&br&&);
通常语句 2 用于评估初始变量的条件。
语句 2 同样是可选的。
如果语句 2 返回 true,则循环再次开始,如果返回 false,则循环将结束。
提示:如果您省略了语句 2,那么必须在循环内提供&break。否则循环就无法停下来。这样有可能令浏览器崩溃。请在本教程稍后的章节阅读有关 break 的内容。
通常语句 3 会增加初始变量的值。
语句 3 也是可选的。
语句 3 有多种用法。增量可以是负数 (i--),或者更大 (i=i+15)。
语句 3 也可以省略(比如当循环内部有相应的代码时):
var i=0,len=cars.
for (; i& )
document.write(cars[i] + &&br&&); i++; }
For/In 循环
JavaScript for/in 语句循环遍历对象的属性:
var person={fname:&John&,lname:&Doe&,age:25};
for (xinperson)
txt=txt + person[x];
转载注明本文地址:
上一编:下一编:

我要回帖

更多关于 javascript 类型 的文章

 

随机推荐