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 |