2012-11-12 2 views
1
<!-- HTML --> 
<div id="target"></div> 

// JavaScript 
function MyObject() {} 

var $my_div = $('#target'), 
    data; 
$my_div.data('extra', (data = new MyObject())); 

JavaScript에서 표현식은 다음과 같습니다. (data = new MyObject())으로 평가됩니다 MyObject 개체; 반면 C와 같은 언어에서는 표현식의 값은 항상 true입니다.JavaScript의 배정 연산 값

위의 코드 조각에서 (data = new MyObject())은 다음과 똑같은 일을 수행하는 지름길 일뿐입니다?

... 
var $my_div = $('#target'), 
    data = new MyObject(); 
$my_div.data('extra', data); 

부연 설명 : 나는 처음 (data = new MyObject())이 실제로 무엇을하는지 확실하지 않았다. 난 왜 .data()에서 그것을하는 것이 아니라 그 자체의 표현으로 그 표현을 분리하지 않는지 궁금합니다. 문제는 그 표현을 .data() 또는 별도로 수행하는 것 사이에 차이가 있는지 여부입니다.

+3

그래서 질문이 무엇입니까? 예, JS에서 작동하는 방식입니다. – elclanrs

답변

1

대부분의 언어로 할당 연산자는 실제로 할당 값 (= 자바 스크립트처럼)으로 평가됩니다. 예를 들어, C 코드에서 다음과 같은 것을 볼 것이 일반적입니다 :

MyObject* config = NULL; 
if (config = parse_config()) { 
    // config is not NULL 
} 

그것은 (가 비 NULL 포인터 참으로 취급하는 경우, 예를 들어) 특정 언어가 무엇인가를 해석하는 방법의 문제이다.그래서 몇 사람들이 함께 할 것입니다, 그러나,이 같은 읽을하지 않는 것

MyObject config = null; 
if ((config = ParseConfig() != null) { 
    // config is not null 
} 

: (C# 또는 자바와 같은) 일부처럼하지 말고 구체적으로 당신을 필요로합니다.

귀하의 질문에 대한 예제는 동일합니다 - 숨겨진 마법을 찾을 수 없음 :)

7

JavaScript에서 표현식은. (data = new MyObject())MyObject 개체로 평가됩니다. , C와 같은 언어에서, 식의 값이 항상 true

반면 아뇨, 자바 스크립트 등의 C에서, 동일한 표현의 결과는 MyObject 객체에 대한 참조이다. 비 null 객체 참조는 사실이지만 (두 언어 모두에서) 사실입니다.

할당 표현의 결과는 B에서 구문 적으로 파생 된 모든 언어 (C, Java, JavaScript, C# 및 약 12 ​​개 이상 포함) 그 표현의 손 쪽. 예컨대 :

a = b = c; 

... 의미 "다음 평가를 다시하지 않고 a에 다시 할당 bc의 값을 할당". 이 아니며 " cb에게 할당 한 다음 truea"으로 지정합니다. 나는 그것이 의미하는 언어를 모른다 (하나가 존재하지 않는다는 것을 의미하지는 않는다). 일부 언어 계열에서는 =이 할당 연산자와 비교 연산자로 해당 언어에서 두 가지 의무를 수행하므로 bc과 비교하고 그 결과를 a (할당하지 않고 b 또는 c)으로 지정해야합니다. 컨텍스트 및 해당 컨텍스트 ( 오른쪽 생산 생산), 비교 연산자입니다. (기본 언어는 이와 비슷합니다.)

아무런 질문이 없기 때문에 실제로는 대답이 아닙니다. 그러나 잘하면 그것은 도움이 될 것입니다 ...

+0

+1 "이 답변이 아닙니다":-) – Bergi

+1

아름다운 "답변이 아닙니다":) – alex