[javascript] [객체 객체]는 무엇을 의미합니까?

함수에서 반환 된 값을 경고하려고하는데 경고에 다음이 표시됩니다.

[object Object]  

다음은 JavaScript 코드입니다.

<script type="text/javascript">
$(function ()
{
var $main = $('#main'),
    $1 = $('#1'),
    $2 = $('#2');

$2.hide(); // hide div#2 when the page is loaded

$main.click(function ()
{
    $1.toggle();
    $2.toggle();
});

 $('#senddvd').click(function ()
{
   alert('hello');
   var a=whichIsVisible();
   alert(whichIsVisible());
});

function whichIsVisible()
{
    if (!$1.is(':hidden')) return $1;
    if (!$2.is(':hidden')) return $2;
}

 });

 </script>

whichIsVisible 내가 확인하려는 기능입니다.



답변

객체에서 문자열로의 기본 변환은 "[object Object]"입니다.

jQuery 객체를 다룰 때 다음과 같이 할 수 있습니다.

alert(whichIsVisible()[0].id);

요소의 ID를 인쇄합니다.

코멘트에서 언급 한 바와 같이, 당신은 수행하여 인트로 스페 객체에 파이어 폭스 나 크롬 등의 브라우저에 포함 된 도구를 사용한다 console.log(whichIsVisible())대신 alert.

참고 : ID는 숫자로 시작하면 안됩니다.


답변

다른 사람들이 언급했듯이 이것은 객체의 기본 직렬화입니다. 하지만 왜 [object Object]그럴까요 [object]?

Javascript에는 다양한 유형의 객체가 있기 때문입니다!

  • 기능 개체 :
    stringify(function (){})->[object Function]
  • 배열 객체 :
    stringify([])->[object Array]
  • RegExp 객체
    stringify(/x/) ->[object RegExp]
  • 날짜 개체
    stringify(new Date) ->[object Date]
  • 몇 가지 더
  • 개체 개체 !
    stringify({})->[object Object]

생성자 함수가 호출되고 Object(대문자 “O”로) “object”(작은 “o”로)라는 용어는 사물의 구조적 특성을 나타 내기 때문입니다.

일반적으로 자바 스크립트에서 “객체”에 대해 이야기 할 때 실제로 는 다른 유형이 아니라 ” 객체 객체 “를 의미 합니다.

여기서 stringify다음과 같아야합니다 :

function stringify (x) {
    console.log(Object.prototype.toString.call(x));
}


답변

[object Object] javascript에서 객체의 기본 toString 표현입니다.

개체의 속성을 알고 싶다면 다음과 같이 개체에 대해 알아보십시오.

for(var property in obj) {
    alert(property + "=" + obj[property]);
}

특정 경우에는 jQuery 객체를 얻고 있습니다. 대신 다음을 시도하십시오.

$('#senddvd').click(function ()
{
   alert('hello');
   var a=whichIsVisible();
   alert(whichIsVisible().attr("id"));
});

이것은 보이는 요소의 ID를 경고해야합니다.


답변

해당 객체의 toString()함수에서 반환하는 값 입니다.


어제 어떤 div가 표시되는지 결정하는 것에 대한 귀하의 질문에 답변했기 때문에 귀하가하려는 작업을 이해합니다 . 🙂
whichIsVisible()함수는 실제 jQuery 객체를 반환 합니다. 프로그래밍 방식 으로 더 유용 할 것이라고 생각했기 때문 입니다. 이 함수를 디버깅 목적으로 사용하려면 다음과 같이하면됩니다.

function whichIsVisible_v2()
{
    if (!$1.is(':hidden')) return '#1';
    if (!$2.is(':hidden')) return '#2';
}

즉, 문제를 디버깅하려는 경우 보다는 적절한 디버거를 사용해야합니다alert() . Firefox를 사용하는 경우 Firebug 는 훌륭합니다. IE8, Safari 또는 Chrome을 사용하는 경우 기본 제공 디버거가 있습니다.


답변

다음과 같이 [object Object] 내부의 값을 볼 수 있습니다.

Alert.alert(  JSON.stringify(userDate)  );

이렇게 해봐

    realm.write(() => {
       const userFormData = realm.create('User',{
       user_email: value.username,
       user_password: value.password,
      });
     });

      const userDate = realm.objects('User').filtered('user_email == $0', value.username.toString(), );
      Alert.alert(  JSON.stringify(userDate)  );

참고

https://off.tokyo/blog/react-native-object-object/


답변

기초

당신은 그것을 모를 수도 있지만, JavaScript에서 우리가 문자열, 숫자 또는 부울 프리미티브와 상호 작용할 때마다 우리는 객체 그림자와 강제의 숨겨진 세계로 들어갑니다.

문자열, 숫자, 부울, 널, 정의되지 않음 및 기호.

자바 스크립트에서 7 개 기본 유형이있다 : undefined, null, boolean, string, number, bigintsymbol. 다른 모든 것은 객체입니다. 기본 유형 boolean, stringnumber해당 객체 대응 요소로 래핑 할 수 있습니다. 이러한 개체는 각각 Boolean, StringNumber생성자의 인스턴스입니다 .

typeof true; //"boolean"
typeof new Boolean(true); //"object"

typeof "this is a string"; //"string"
typeof new String("this is a string"); //"object"

typeof 123; //"number"
typeof new Number(123); //"object"

프리미티브에 속성이없는 경우 왜 "this is a string".length값을 반환합니까?

JavaScript는 프리미티브와 객체 사이를 쉽게 강제하기 때문입니다. 이 경우 속성 길이에 액세스하기 위해 문자열 값이 문자열 개체로 강제 변환됩니다. 문자열 객체는 가비지 수집의 신들에게 희생 된 후 몇 초 동안 만 사용됩니다. 그러나 TV 발견 쇼의 정신에 따라 찾기 어려운 생물을 가두 고 추가 분석을 위해 보존 할 것입니다.

이를 더 설명하기 위해 String 생성자 프로토 타입에 새 속성을 추가하는 다음 예제를 고려하십시오.

String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty;            // 5

즉, 프리미티브는 각각의 객체 생성자가 정의한 모든 속성 (메서드 포함)에 액세스 할 수 있습니다.

그래서 우리는 필요에 따라 기본 유형이 각각의 Object 대응 물로 적절하게 강제되는 것을 보았습니다.

toString()방법 분석

다음 코드를 고려하십시오.

var myObj    = {lhs: 3, rhs: 2};
var myFunc   = function(){}
var myString = "This is a sample String";
var myNumber = 4;
var myArray  = [2, 3, 5];

myObj.toString();     // "[object Object]"
myFunc.toString();    // "function(){}"
myString.toString();  // "This is a sample String"
myNumber.toString();  // "4"
myArray.toString();   // "2,3,5"

위에서 논의한 바와 같이, 실제로 일어나는 일은 우리 toString()가 원시 유형에 대해 메소드를 호출 할 때 , 메소드를 호출하기 전에 객체 대응으로 강제 변환되어야한다는 것입니다.
즉 , 다른 기본 유형과 myNumber.toString()동일 Number.prototype.toString.call(myNumber)하고 유사합니다.

그러나 기본 유형이 toString()해당 Object 생성자 함수 대응 메소드에 전달되는 대신에 기본 유형이 toString()Object 함수 생성자 ( Object.prototype.toString.call(x))의 메소드에 매개 변수로 전달되도록 강제하면 어떻게 될까요?

Object.prototype.toString () 자세히 살펴보기

당으로 문서 toString 메소드가 호출되면, 다음 단계가 수행됩니다

  1. 는 IF this값이 undefined반환 "[object Undefined]".
  2. 는 IF this값이 null반환 "[object Null]".
  3. 이 값이 위의 값이 아닌 경우 값을 인수로 전달하는 O호출 결과가 됩니다.toObjectthis
  4. class를의 [[Class]]내부 속성 값으로 지정합니다 O.
  5. 세 개의 문자열을 연결의 결과 인 문자열 값 반환 "[object ", class등을 "]".

다음 예제에서 이것을 이해하십시오.

var myObj       = {lhs: 3, rhs: 2};
var myFunc      = function(){}
var myString    = "This is a sample String";
var myNumber    = 4;
var myArray     = [2, 3, 5];
var myUndefined = undefined;
var myNull      = null;

Object.prototype.toString.call(myObj);        // "[object Object]"
Object.prototype.toString.call(myFunc);       // "[object Function]"
Object.prototype.toString.call(myString);     // "[object String]"
Object.prototype.toString.call(myNumber);     // "[object Number]"
Object.prototype.toString.call(myArray);      // "[object Array]"
Object.prototype.toString.call(myUndefined);  // "[object Undefined]"
Object.prototype.toString.call(myNull);       // "[object Null]"

참조 :
https://es5.github.io/x15.2.html#x15.2.4.2
https://es5.github.io/x9.html#x9.9
https://javascriptweblog.wordpress.com/ 2010 / 09 / 27 / 자바 스크립트 프리미티브의 비밀 생활 /


답변

[object Object]JavaScript의 기본 문자열 표현입니다 Object. 이 코드를 실행하면 얻을 수있는 것입니다.

alert({}); // [object Object]

다음 toString과 같이 메서드 를 재정 의하여 기본 표현을 변경할 수 있습니다 .

var o = {toString: function(){ return "foo" }};
alert(o); // foo