JavaScript는 다양한 유형의 루프를 지원합니다.
for - 특정 횟수만큼 코드 블록을 반복합니다.
for/in - 객체의 속성을 반복합니다
while - 지정된 조건이 true일 때 지정된 코드 블록을 반복합니다.
do/while - 지정된 조건이 true일 때 지정된 코드 블록을 반복합니다
1. 연산자 : 왼쪽의 피연산자는 문자열이어야 하거나 문자열로 변환할 수 있어야 하며, 오른쪽의 피연산자는 객체 또는 배열입니다. 이 연산자의 왼쪽 값이 오른쪽 개체의 속성 이름인 경우 true를 반환합니다.
예:
var point={x:1,y:2}; //对象直接量 var has_x="x" in point; //返回true var has_z="z" in point; //返回false var ts="toString" in point;//返回true,toString为继承方法
2. for/in 문: 구문,
(객체의 변수)
진술;
객체 속성을 순회하는 방법을 제공합니다.
예:
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 문의 왼쪽은 변수, 배열 요소 또는 선언문을 선언하는 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]; }
주식은 각 종목의 이름으로 입출금합니다.
포트폴리오[주식]은 각 주식의 수량을 입출금합니다.
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 루프를 사용하는 것이 가장 좋습니다.