본문 바로가기
programming/javascript

in

by hotdogya 2012. 12. 27.
var    dummyStyle = doc.createElement('div').style,
	vendor = (function () {
		var vendors = 't,webkitT,MozT,msT,OT'.split(','),
			t,
			i = 0,
			l = vendors.length;

		for ( ; i < l; i++ ) {
			t = vendors[i] + 'ransform';
			if ( t in dummyStyle ) {
				return vendors[i].substr(0, vendors[i].length - 1);
			}
		}

		return false;
	})(),
	cssVendor = vendor ? '-' + vendor.toLowerCase() + '-' : '',
//이하 생략

iscroll4 수정 할 일이 있어서 소스 보면서 처음 보는 연산자? 발견!!


in


포함하고 있는지를 판단한다. 그래서 in

참 직관적인 작명 센스!! 검색하니까 for in 만 나오더라...


위에 소스가 하는건

dummyStyle 이라는 div객체를 만들고 브라우저가

transform, webkitTransform, msTransform, OTransform 속성을 지원하는지 체크 한다.

위 소스는 크롬에서는 cssVendor 의 값은 -webkit- 을 리턴한다.



밑에 예제를 보자

// Arrays
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
0 in trees        // returns true
3 in trees        // returns true
6 in trees        // returns false
"bay" in trees    // returns false (you must specify the index number,
                  // not the value at that index)
"length" in trees // returns true (length is an Array property)

// Predefined objects
"PI" in Math          // returns true

// Custom objects
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar  // returns true
"model" in mycar // returns true

배열안에 해당값이 있는지 판단한다.
0 in trees // returns true
trees 배열에 0번째 값이 있는지 판단한다.

6 in trees // returns false
trees 배열은 0~4까지 5개의 값을 가지니까 false가 리턴된다.

여기서 신기한건 속성의 포함 유무까지 판단해 준다는 거다.


"length" in trees

trees는 array기 때문에 length라는 속성을 가지고 있다. 그래서 결과는 true


array 가 가지고 있는 함수 join, push, pop 전부 포함하고 있기 때문에 true 가 리턴된다.





var color1 = new String("green");
"length" in color1 // returns true
var color2 = "coral";
"length" in color2 // generates an error (color2 is not a String object)

이건 당연한 결과?

var mycar = {make: "Honda", model: "Accord", year: 1998};
delete mycar.make;
"make" in mycar;  // returns false

var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
delete trees[3];
3 in trees; // returns false

If you set a property to undefined but do not delete it, the in operator returns true for that property.

var mycar = {make: "Honda", model: "Accord", year: 1998};
mycar.make = undefined;
"make" in mycar;  // returns true
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
trees[3] = undefined;
3 in trees; // returns true


Inherited properties

The in operator returns true for properties in the prototype chain.

"toString" in {}; // returns true

상속 속성 까지 체크하나보다.


추가 적으로 아래 처럼 응용하여 사용하기도 하나보다.



if ( foo == "bar" || foo == "foobar" || foo == "foo" )
{
 //...
}
// can be written as
if ( foo in { bar:1, foobar:1, foo:1 } )
{
 //...
}

원문 : https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/in

'programming > javascript' 카테고리의 다른 글

extend, eval, load  (0) 2013.01.06
let  (0) 2012.12.27
Self-Executing Anonymous Functions (익명 함수)  (0) 2012.12.27
jQuery Selector, Filter  (0) 2012.12.26
숫자만 입력 받기  (0) 2012.12.14