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 |