Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Nếu

function isObject(obj) {
  return obj === Object(obj);
}
9, đó là một đối tượng hoặc
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0.

Nếu bạn muốn loại trừ

// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0, các mảng hoặc chức năng sẽ được loại trừ, chỉ cần làm cho nó:

if (
    typeof yourVariable === 'object' &&
    !Array.isArray(yourVariable) &&
    yourVariable !== null
) {
    executeSomeCode();
}

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Naetmul

13.7K6 Huy hiệu vàng56 Huy hiệu bạc80 Huy hiệu Đồng6 gold badges56 silver badges80 bronze badges

Đã trả lời ngày 14 tháng 12 năm 2011 lúc 20:40Dec 14, 2011 at 20:40

ChuckchuckChuck

231K29 Huy hiệu vàng296 Huy hiệu bạc387 Huy hiệu đồng29 gold badges296 silver badges387 bronze badges

25

UPDATE::

Câu trả lời này là không đầy đủ và cho kết quả sai lệch. Ví dụ,

// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0 cũng được coi là loại
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
3 trong JavaScript, chưa kể một số trường hợp cạnh khác. Thực hiện theo đề xuất bên dưới và chuyển sang câu trả lời "được nâng cấp nhất (và đúng!)":
. For example,
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0 is also considered of type
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
3 in JavaScript, not to mention several other edge cases. Follow the recommendation below and move on to other "most upvoted (and correct!) answer":

typeof yourVariable === 'object' && yourVariable !== null

Câu trả lời ban đầu::

Hãy thử sử dụng

// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
4 và/hoặc
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
5.

EDIT: Câu trả lời này đưa ra ý tưởng về cách kiểm tra các thuộc tính của biến, nhưng nó không phải là một công thức chống đạn (sau tất cả không có công thức nào cả!) Để kiểm tra xem nó có phải là một đối tượng không. Vì mọi người có xu hướng tìm kiếm một cái gì đó để sao chép từ đây mà không cần thực hiện bất kỳ nghiên cứu nào, tôi rất khuyên bạn nên chuyển sang câu trả lời khác, được nâng cấp (và chính xác!).

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

rap-2-h

27.7K33 Huy hiệu vàng160 Huy hiệu bạc249 Huy hiệu Đồng33 gold badges160 silver badges249 bronze badges

Đã trả lời ngày 14 tháng 12 năm 2011 lúc 20:39Dec 14, 2011 at 20:39

29

Hãy xác định "đối tượng" trong JavaScript. Theo tài liệu MDN, mọi giá trị đều là một đối tượng hoặc nguyên thủy:. According to the MDN docs, every value is either an object or a primitive:

Giá trị nguyên thủy, nguyên thủy

Một dữ liệu không phải là một đối tượng và không có bất kỳ phương thức nào. JavaScript có 7 loại dữ liệu nguyên thủy: chuỗi, số, bigint, boolean, không xác định, biểu tượng và null.

Nguyên thủy là gì?

  • // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    6
  • // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    7
  • // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    8
  • // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    0
  • _.isObject = function(obj) {
      return obj === Object(obj);
    };
    
    0

Đối tượng là gì (tức là không phải là nguyên thủy)?

  • _.isObject = function(obj) {
      return obj === Object(obj);
    };
    
    1
  • Mọi thứ đều xuất thân từ
    _.isObject = function(obj) {
      return obj === Object(obj);
    };
    
    1
    • _.isObject = function(obj) {
        return obj === Object(obj);
      };
      
      3
      • _.isObject = function(obj) {
          return obj === Object(obj);
        };
        
        4
      • _.isObject = function(obj) {
          return obj === Object(obj);
        };
        
        5
      • _.isObject = function(obj) {
          return obj === Object(obj);
        };
        
        6-Các chức năng do người dùng xác định
    • _.isObject = function(obj) {
        return obj === Object(obj);
      };
      
      7-Thuộc tính nguyên mẫu của hàm do người dùng xác định: Đây không phải là nguyên mẫu
      _.isObject = function(obj) {
        return obj === Object(obj);
      };
      
      8S
      • _.isObject = function(obj) {
          return obj === Object(obj);
        };
        
        9-"Mới"-Chức năng do người dùng xác định
    • _.isObject = function(obj) {
        var type = typeof obj;
        return type === 'function' || type === 'object' && !!obj;
      };
      
      0
    • _.isObject = function(obj) {
        var type = typeof obj;
        return type === 'function' || type === 'object' && !!obj;
      };
      
      1
      • Mảng
    • _.isObject = function(obj) {
        var type = typeof obj;
        return type === 'function' || type === 'object' && !!obj;
      };
      
      2 - Các đối tượng được tạo bằng ký hiệu theo nghĩa đen
    • _.isObject = function(obj) {
        var type = typeof obj;
        return type === 'function' || type === 'object' && !!obj;
      };
      
      3 - Các gói xung quanh nguyên thủy
    • ... nhiều thứ khác ...
  • _.isObject = function(obj) {
      var type = typeof obj;
      return type === 'function' || type === 'object' && !!obj;
    };
    
    4
  • Mọi thứ đều xuất thân từ
    _.isObject = function(obj) {
      var type = typeof obj;
      return type === 'function' || type === 'object' && !!obj;
    };
    
    4

Cách kiểm tra xem giá trị có phải là đối tượng không

_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};
6 tự nó sẽ không hoạt động, bởi vì nó bỏ lỡ hai trường hợp:

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}

_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};
7 sẽ không hoạt động, vì dương tính giả (
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0) và âm tính giả (chức năng):

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}

_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};
9 sẽ không hoạt động, vì tích cực sai cho tất cả các nguyên thủy:

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"

Vì vậy, tôi sử dụng:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}

Câu trả lời của Daan dường như cũng hoạt động:

function isObject(obj) {
  return obj === Object(obj);
}

bởi vì, theo các tài liệu MDN:

Trình xây dựng đối tượng tạo ra một trình bao bọc đối tượng cho giá trị đã cho. Nếu giá trị null hoặc không xác định, nó sẽ tạo và trả về một đối tượng trống, nếu không, nó sẽ trả về một đối tượng của một loại tương ứng với giá trị đã cho. Nếu giá trị là một đối tượng đã có, nó sẽ trả về giá trị.


Một cách thứ ba dường như hoạt động (không chắc chắn liệu nó có phải là 100%) là sử dụng

typeof yourVariable === 'object' && yourVariable !== null
00 để ném một ngoại lệ nếu đối số của nó không phải là đối tượng:

// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Đã trả lời ngày 18 tháng 3 năm 2014 lúc 14:44Mar 18, 2014 at 14:44

Matt Fenwickmatt FenwickMatt Fenwick

47.4K21 Huy hiệu vàng125 Huy hiệu bạc190 Huy hiệu Đồng21 gold badges125 silver badges190 bronze badges

11

UnderCore.js cung cấp phương pháp sau để tìm hiểu xem có thực sự là một đối tượng không:

_.isObject = function(obj) {
  return obj === Object(obj);
};

CẬP NHẬT

Do lỗi trước đó trong V8 và tối ưu hóa tốc độ vi mô nhỏ, phương pháp này trông như sau kể từ khi nhấn mạnh.js 1.7.0 (tháng 8 năm 2014):

_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Đã trả lời ngày 5 tháng 2 năm 2013 lúc 11:50Feb 5, 2013 at 11:50

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

DaandaanDaan

7.4255 Huy hiệu vàng42 Huy hiệu bạc52 Huy hiệu Đồng5 gold badges42 silver badges52 bronze badges

12

typeof yourVariable === 'object' && yourVariable !== null
01 sẽ trở lại:

  • typeof yourVariable === 'object' && yourVariable !== null
    
    02 Nếu myvar là một đối tượng
  • typeof yourVariable === 'object' && yourVariable !== null
    
    03 nếu myvar là một mảng
  • etc.

Để biết thêm thông tin về điều này và tại sao nó là một thay thế tốt cho typeof, hãy xem bài viết này.

Ionică bizĂu

104K82 Huy hiệu vàng274 Huy hiệu bạc456 Huy hiệu Đồng82 gold badges274 silver badges456 bronze badges

Đã trả lời ngày 13 tháng 11 năm 2012 lúc 6:20Nov 13, 2012 at 6:20

ChristophechristopheChristophe

26.4K25 Huy hiệu vàng94 Huy hiệu bạc137 Huy hiệu đồng25 gold badges94 silver badges137 bronze badges

10

Chỉ đơn giản là kiểm tra đối với đối tượng hoặc mảng mà không cần thêm chức năng gọi (tốc độ). Như cũng được đăng ở đây.

isArray()

typeof yourVariable === 'object' && yourVariable !== null
0

isLiteralObject () - Lưu ý: Chỉ sử dụng cho các chữ cái đối tượng, vì nó trả về sai cho các đối tượng tùy chỉnh, như ngày mới hoặc mới của bạn. - Note: use for Object literals only, as it returns false for custom objects, like new Date or new YourCustomObject.

typeof yourVariable === 'object' && yourVariable !== null
1

Đã trả lời ngày 17 tháng 5 năm 2013 lúc 11:39May 17, 2013 at 11:39

Zupazupazupa

12.4K5 Huy hiệu vàng39 Huy hiệu bạc39 Huy hiệu đồng5 gold badges39 silver badges39 bronze badges

18

Với chức năng typeof yourVariable === 'object' && yourVariable !== null 04:

typeof yourVariable === 'object' && yourVariable !== null
2

Không có chức năng typeof yourVariable === 'object' && yourVariable !== null 04:

Chỉ ngạc nhiên khi có bao nhiêu upvote cho câu trả lời sai 😮 Chỉ có 1 câu trả lời đã vượt qua các bài kiểm tra của tôi !!! Ở đây tôi đã tạo phiên bản đơn giản hóa của mình:
Only 1 answer passed my tests!!! Here I've created my simplified version:

typeof yourVariable === 'object' && yourVariable !== null
3

Đối với tôi, nó rõ ràng và đơn giản, và chỉ hoạt động! Đây là bài kiểm tra của tôi:

typeof yourVariable === 'object' && yourVariable !== null
4

Một lần nữa: Không phải tất cả các câu trả lời đều vượt qua các bài kiểm tra này !!! 🙈


Trong trường hợp bạn cần xác minh rằng đối tượng là thể hiện của lớp cụ thể, bạn phải kiểm tra hàm tạo với lớp cụ thể của mình, như:instance of particular class you have to check constructor with your particular class, like:

typeof yourVariable === 'object' && yourVariable !== null
5

Bài kiểm tra đơn giản:

typeof yourVariable === 'object' && yourVariable !== null
6

Kết quả là bạn sẽ có mã nghiêm ngặt và mạnh mẽ!


Trong trường hợp bạn sẽ không tạo các chức năng như

typeof yourVariable === 'object' && yourVariable !== null
06,
typeof yourVariable === 'object' && yourVariable !== null
07,
typeof yourVariable === 'object' && yourVariable !== null
08, v.v., bạn có thể xem xét tùy chọn sử dụng các chức năng tổng quát này:

typeof yourVariable === 'object' && yourVariable !== null
7

Nó sẽ không hoạt động chính xác cho tất cả các trường hợp thử nghiệm được đề cập trước đó, nhưng nó đủ tốt cho tất cả các đối tượng (đơn giản hoặc được xây dựng).


typeof yourVariable === 'object' && yourVariable !== null
09 sẽ không hoạt động trong trường hợp
_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};
4 do thực hiện nội bộ
typeof yourVariable === 'object' && yourVariable !== null
11 được giải thích ở đây nhưng bạn có thể sử dụng
typeof yourVariable === 'object' && yourVariable !== null
09 trong triển khai tinh vi hơn:

typeof yourVariable === 'object' && yourVariable !== null
8

Đã có gói được tạo trên NPM V1 dựa trên việc triển khai này! Và nó hoạt động cho tất cả các trường hợp thử nghiệm được mô tả trước đó! 🙂

Đã trả lời ngày 10 tháng 10 năm 2017 lúc 9:21Oct 10, 2017 at 9:21

cn007bcn007bcn007b

16.2k6 Huy hiệu vàng57 Huy hiệu bạc70 Huy hiệu Đồng6 gold badges57 silver badges70 bronze badges

7

Ôi chúa ơi! Tôi nghĩ rằng điều này có thể ngắn hơn bao giờ hết, hãy xem điều này:

Mã ngắn và cuối cùng

typeof yourVariable === 'object' && yourVariable !== null
9

Giải thích

Các loại trở lại

Các đối tượng JavaScript (bao gồm

// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0) trả về
typeof yourVariable === 'object' && yourVariable !== null
14

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
0

Kiểm tra các hàm tạo của họ

Kiểm tra thuộc tính

typeof yourVariable === 'object' && yourVariable !== null
15 của họ trả về chức năng với tên của họ.

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
1

Giới thiệu chức năng.name

typeof yourVariable === 'object' && yourVariable !== null
16 Trả về một tên sẵn sàng của hàm hoặc
typeof yourVariable === 'object' && yourVariable !== null
17 để đóng.

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
2

Lưu ý: Kể từ năm 2018, chức năng. As of 2018, Function.name might not work in IE https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#Browser_compatibility

Đã trả lời ngày 21 tháng 7 năm 2018 lúc 16:27Jul 21, 2018 at 16:27

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

3

Ok, hãy cung cấp cho bạn khái niệm này trước khi trả lời câu hỏi của bạn, trong các hàm javascript là đối tượng, cũng null, đối tượng, mảng và thậm chí là ngày, vì vậy khi bạn thấy không có cách đơn giản như typeof obj === 'đối tượng', vì vậy Mọi thứ được đề cập ở trên sẽ trả về đúng, nhưng có nhiều cách để kiểm tra nó bằng việc viết một chức năng hoặc sử dụng JavaScript Frameworks, OK:not a simple way like typeof obj === 'object', so everything mentioned above will return true, but there are ways to check it with writing a function or using JavaScript frameworks, OK:

Bây giờ, hãy tưởng tượng bạn có đối tượng này là một đối tượng thực sự (không phải null hoặc hàm hoặc mảng):

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
3

JavaScript thuần túy:

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
4

hoặc

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
5

hoặc

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
6

hoặc

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
7

Bạn có thể chỉ cần sử dụng một trong các chức năng này như trên mã của mình bằng cách gọi chúng và nó sẽ trả về đúng nếu đó là một đối tượng:

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
8

Nếu bạn đang sử dụng khung JavaScript, họ thường đã chuẩn bị các loại chức năng này cho bạn, đây là một số trong số đó:

JQuery:

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
9

Angular:

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}
0

Undercore và Lodash:

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}
1

Đã trả lời ngày 15 tháng 2 năm 2017 lúc 13:39Feb 15, 2017 at 13:39

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

AlirezaalirezaAlireza

96K26 Huy hiệu vàng265 Huy hiệu bạc167 Huy hiệu đồng26 gold badges265 silver badges167 bronze badges

2

Nó phụ thuộc vào những gì bạn muốn nói với "là một đối tượng". Nếu bạn muốn mọi thứ không phải là nguyên thủy, tức là những thứ mà bạn có thể đặt các thuộc tính mới, điều này sẽ thực hiện thủ thuật:

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}
2

Nó không bao gồm các nguyên thủy (số đơn giản/________ 118/________ 119, chuỗi đơn giản, ký hiệu, ________ 78/________ 121,

_.isObject = function(obj) {
  return obj === Object(obj);
};
0 và
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0) nhưng sẽ trả về đúng cho mọi thứ khác (bao gồm
typeof yourVariable === 'object' && yourVariable !== null
24,
typeof yourVariable === 'object' && yourVariable !== null
25 và
typeof yourVariable === 'object' && yourVariable !== null
26 đối tượng). Lưu ý rằng JS không xác định các đối tượng "máy chủ" nào, chẳng hạn như
typeof yourVariable === 'object' && yourVariable !== null
27 hoặc
typeof yourVariable === 'object' && yourVariable !== null
28, sẽ quay lại khi được sử dụng với
typeof yourVariable === 'object' && yourVariable !== null
29, vì vậy chúng rất khó để che bằng kiểm tra như thế này.

Nếu bạn muốn biết liệu một cái gì đó là một đối tượng "trơn", tức là nó được tạo ra dưới dạng

typeof yourVariable === 'object' && yourVariable !== null
30 hoặc với
_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};
4, bạn có thể làm điều này:

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}
3

Chỉnh sửa 2018: Bởi vì

typeof yourVariable === 'object' && yourVariable !== null
32 hiện cho phép tùy chỉnh đầu ra của
typeof yourVariable === 'object' && yourVariable !== null
33, hàm
typeof yourVariable === 'object' && yourVariable !== null
34 ở trên có thể trả về
typeof yourVariable === 'object' && yourVariable !== null
21 trong một số trường hợp ngay cả khi đối tượng bắt đầu cuộc sống của nó như một nghĩa đen. Có thể cho rằng, theo quy ước, một đối tượng có thẻ chuỗi tùy chỉnh không chính xác là một đối tượng đơn giản nữa, nhưng điều này còn làm rối tung định nghĩa về một đối tượng đơn giản thậm chí là trong JavaScript.
: Because
typeof yourVariable === 'object' && yourVariable !== null
32 now allows customizing the output of
typeof yourVariable === 'object' && yourVariable !== null
33, the
typeof yourVariable === 'object' && yourVariable !== null
34 function above might return
typeof yourVariable === 'object' && yourVariable !== null
21 in some cases even when the object started its life as a literal. Arguably, by convention an object with a custom string tag isn't exactly a plain object any more, but this has further muddied the definition of what a plain object even is in Javascript.

Đã trả lời ngày 18 tháng 1 năm 2016 lúc 21:12Jan 18, 2016 at 21:12

last-childlast-childlast-child

4.0311 Huy hiệu vàng20 Huy hiệu bạc18 Huy hiệu đồng1 gold badge20 silver badges18 bronze badges

2

Chúa ơi, quá nhiều sự nhầm lẫn trong các câu trả lời khác.

Câu trả lời ngắn

typeof yourVariable === 'object' && yourVariable !== null
36

Để kiểm tra điều này, chỉ cần chạy các câu lệnh sau trong bảng điều khiển Chrome.

Trường hợp 1.

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}
4

Trường hợp 2.

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}
5

Trường hợp 3.

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}
6

Giải trình

Được rồi. Hãy phá vỡ nó

typeof yourVariable === 'object' && yourVariable !== null
37 được trả lại đúng từ ba ứng cử viên -
typeof yourVariable === 'object' && yourVariable !== null
38,

typeof yourVariable === 'object' && yourVariable !== null
39 thu hẹp những ứng cử viên này xuống hai -
typeof yourVariable === 'object' && yourVariable !== null
40

typeof yourVariable === 'object' && yourVariable !== null
41 chỉ thu hẹp đến một -
typeof yourVariable === 'object' && yourVariable !== null
30

Làm ơn cuộn trống!

Bằng cách này, bạn có thể đã học được cách kiểm tra mảng trong JavaScript.

Đã trả lời ngày 24 tháng 9 năm 2018 lúc 11:45Sep 24, 2018 at 11:45

HalfwebdevhalfwebdevHalfWebDev

6.49512 Huy hiệu vàng60 Huy hiệu bạc96 Huy hiệu Đồng12 gold badges60 silver badges96 bronze badges

2

Thử cái này

// oops: isObject(Object) -> false
function isObject(val) {
    return (typeof val === 'object');
}
7

Đã trả lời ngày 9 tháng 5 năm 2012 lúc 11:43May 9, 2012 at 11:43

TalhatalhaTalha

Phim thương hiệu vàng 18,4K88 gold badges48 silver badges65 bronze badges

4

Cách hợp lý nhất để kiểm tra loại giá trị dường như là toán tử

typeof yourVariable === 'object' && yourVariable !== null
29. Vấn đề duy nhất là nó bị phá vỡ khủng khiếp:

  • Nó trả về
    typeof yourVariable === 'object' && yourVariable !== null
    
    14 cho
    // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    0, thuộc loại null.
  • Nó trả về
    typeof yourVariable === 'object' && yourVariable !== null
    
    46 cho các đối tượng có thể gọi, thuộc loại đối tượng.
  • Nó có thể trả về (gần như) bất cứ điều gì nó muốn cho các đối tượng không thể gọi không chuẩn. Ví dụ, IE dường như thích
    typeof yourVariable === 'object' && yourVariable !== null
    
    47. Kết quả bị cấm duy nhất là
    typeof yourVariable === 'object' && yourVariable !== null
    
    46 và các loại nguyên thủy.

typeof yourVariable === 'object' && yourVariable !== null
29 chỉ đáng tin cậy cho không phải là -____ 70 nguyên thủy. Vì vậy, một cách để kiểm tra xem một giá trị là một đối tượng sẽ đảm bảo rằng chuỗi được trả về bởi
typeof yourVariable === 'object' && yourVariable !== null
29 không tương ứng với nguyên thủy và đối tượng không phải là
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0. Tuy nhiên, vấn đề là một tiêu chuẩn trong tương lai có thể giới thiệu một loại nguyên thủy mới và mã của chúng tôi sẽ coi nó là một đối tượng. Các loại mới không xuất hiện thường xuyên, nhưng ví dụ Ecmascript 6 đã giới thiệu loại ký hiệu.

Do đó, thay vì

typeof yourVariable === 'object' && yourVariable !== null
29, tôi chỉ đề xuất các cách tiếp cận có kết quả thay đổi tùy thuộc vào việc giá trị có phải là đối tượng hay không. Những điều sau đây dự định là một

Danh sách toàn diện nhưng không đầy đủ các cách thích hợp để kiểm tra nếu một giá trị thuộc về loại đối tượng.

  • Trình xây dựng

    _.isObject = function(obj) {
      return obj === Object(obj);
    };
    
    4

    Trình xây dựng

    _.isObject = function(obj) {
      return obj === Object(obj);
    };
    
    4 ép buộc đối số truyền cho một đối tượng. Nếu nó đã là một đối tượng, cùng một đối tượng được trả về.

    Do đó, bạn có thể sử dụng nó để ép buộc giá trị cho một đối tượng và so sánh nghiêm ngặt đối tượng đó với giá trị ban đầu.

    Hàm sau yêu cầu ECMAScript 3, đã giới thiệu

    typeof yourVariable === 'object' && yourVariable !== null
    
    56:

    // oops: isObject(Object) -> false
    function isObject(val) {
        return (typeof val === 'object');
    }
    
    8

    Tôi thích cách tiếp cận này bởi vì nó đơn giản và tự mô tả, và một kiểm tra tương tự cũng sẽ hoạt động cho booleans, số và chuỗi. Tuy nhiên, hãy lưu ý rằng nó dựa vào toàn cầu

    _.isObject = function(obj) {
      return obj === Object(obj);
    };
    
    4 không bị che khuất cũng không bị thay đổi.

  • Người xây dựng

    Khi bạn khởi tạo một hàm tạo, nó có thể trả về một giá trị khác với trường hợp chỉ được tạo. Nhưng giá trị đó sẽ bị bỏ qua trừ khi đó là một đối tượng.

    Hàm sau yêu cầu ECMAScript 3, cho phép các hàm tạo trả về các đối tượng không. Trước Ecmascript 3 đã gây ra lỗi, nhưng các câu lệnh

    typeof yourVariable === 'object' && yourVariable !== null
    
    58 đã không tồn tại hồi đó.

    // oops: isObject(Object) -> false
    function isObject(val) {
        return (typeof val === 'object');
    }
    
    9

    Mặc dù ít đơn giản hơn một chút so với ví dụ trước, nhưng cái này không dựa vào bất kỳ tài sản toàn cầu nào, và do đó có thể là an toàn nhất.

  • Giá trị

    typeof yourVariable === 'object' && yourVariable !== null
    
    59

    Thông số kỹ thuật ECMAScript cũ yêu cầu giá trị

    typeof yourVariable === 'object' && yourVariable !== null
    
    59 là một đối tượng. Ecmascript 3 đã giới thiệu
    typeof yourVariable === 'object' && yourVariable !== null
    
    61, cho phép gọi một hàm có giá trị
    typeof yourVariable === 'object' && yourVariable !== null
    
    59 tùy ý, nhưng bị ép buộc vào một đối tượng.

    Ecmascript 5 đã giới thiệu một chế độ nghiêm ngặt đã loại bỏ hành vi này, nhưng ở chế độ cẩu thả, chúng ta vẫn có thể (nhưng có thể được cho là không nên) dựa vào nó.

    > Object.prototype.toString.call(3)
    "[object Number]"
    
    > Object.prototype.toString.call(new Number(3))
    "[object Number]"
    
    0
  • [[Prototype]]

    Tất cả các đối tượng thông thường có một khe bên trong gọi là [[nguyên mẫu]], có giá trị xác định từ đối tượng khác mà nó kế thừa. Giá trị chỉ có thể là một đối tượng hoặc

    // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    0. Do đó, bạn có thể cố gắng tạo một đối tượng kế thừa từ giá trị mong muốn và kiểm tra xem nó có hoạt động không.

    Cả

    typeof yourVariable === 'object' && yourVariable !== null
    
    11 và
    typeof yourVariable === 'object' && yourVariable !== null
    
    00 đều yêu cầu Ecmascript 5.

    > Object.prototype.toString.call(3)
    "[object Number]"
    
    > Object.prototype.toString.call(new Number(3))
    "[object Number]"
    
    1
    > Object.prototype.toString.call(3)
    "[object Number]"
    
    > Object.prototype.toString.call(new Number(3))
    "[object Number]"
    
    2
  • Một số cách mới của Ecmascript 6

    Ecmascript 6 giới thiệu một số cách gián tiếp mới để kiểm tra là giá trị là một đối tượng. Họ sử dụng cách tiếp cận trước đây để chuyển giá trị cho một số mã yêu cầu một đối tượng, được bọc bên trong một câu lệnh

    typeof yourVariable === 'object' && yourVariable !== null
    
    58 để bắt lỗi. Một số ví dụ ẩn, không đáng để bình luận


Lưu ý: Tôi cố tình bỏ qua một số phương pháp như

typeof yourVariable === 'object' && yourVariable !== null
67 (ES5) và
typeof yourVariable === 'object' && yourVariable !== null
68 (ES6) vì chúng gọi các phương pháp nội bộ thiết yếu có thể làm những điều khó chịu, ví dụ: Nếu
typeof yourVariable === 'object' && yourVariable !== null
69 là một proxy. Vì lý do an toàn, ví dụ của tôi chỉ tham khảo
typeof yourVariable === 'object' && yourVariable !== null
69 mà không truy cập trực tiếp.

Đã trả lời ngày 28 tháng 8 năm 2016 lúc 0:48Aug 28, 2016 at 0:48

OrioloriolOriol

258K57 Huy hiệu vàng410 Huy hiệu bạc494 Huy hiệu đồng57 gold badges410 silver badges494 bronze badges

5

Đây là một câu trả lời với chuỗi tùy chọn, và có lẽ là hàm

typeof yourVariable === 'object' && yourVariable !== null
71 nhỏ nhất cho câu hỏi này.

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"
3

Đã trả lời ngày 8 tháng 5 năm 2020 lúc 17:42May 8, 2020 at 17:42

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Jayant Bhawaljayant BhawalJayant Bhawal

1.7742 huy hiệu vàng25 Huy hiệu bạc31 Huy hiệu đồng2 gold badges25 silver badges31 bronze badges

7

Little late ... cho "đối tượng đơn giản" (ý tôi là, như {'x': 5, 'y': 7}) Tôi có đoạn trích nhỏ này:

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"
4

Nó tạo ra đầu ra tiếp theo:

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"
5

Nó luôn luôn làm việc cho tôi. Nếu sẽ trả về "true" chỉ khi loại "O" là "đối tượng", nhưng không có null, hoặc mảng hoặc hàm. :)

Đã trả lời ngày 25 tháng 10 năm 2015 lúc 16:26Oct 25, 2015 at 16:26

Emilio Grisolíaemilio GrisolíaEmilio Grisolía

1.1731 huy hiệu vàng9 Huy hiệu bạc14 Huy hiệu đồng1 gold badge9 silver badges14 bronze badges

1

Sẵn sàng sử dụng các chức năng để kiểm tra

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"
6

Giải trình

  • Trong JavaScript,

    // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    0,
    _.isObject = function(obj) {
      return obj === Object(obj);
    };
    
    4,
    typeof yourVariable === 'object' && yourVariable !== null
    
    74,
    typeof yourVariable === 'object' && yourVariable !== null
    
    75 và
    typeof yourVariable === 'object' && yourVariable !== null
    
    76 đều là tất cả các đối tượng. Mặc dù,
    // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    0 là một chút. Vì vậy, tốt hơn là kiểm tra
    // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    0 trước tiên, để phát hiện nó không phải là null.

  • Kiểm tra

    typeof yourVariable === 'object' && yourVariable !== null
    
    79 đảm bảo rằng
    typeof yourVariable === 'object' && yourVariable !== null
    
    80 là một đối tượng. Nếu không có kiểm tra này,
    typeof yourVariable === 'object' && yourVariable !== null
    
    81 sẽ là vô nghĩa, vì nó sẽ trả lại đối tượng cho mọi thứ, ngay cả đối với
    _.isObject = function(obj) {
      return obj === Object(obj);
    };
    
    0 và
    // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    0! Ví dụ:
    typeof yourVariable === 'object' && yourVariable !== null
    
    84 Trả về
    typeof yourVariable === 'object' && yourVariable !== null
    
    85!

    Sau khi kiểm tra

    typeof yourVariable === 'object' && yourVariable !== null
    
    79, toString.call (o) là một phương pháp tuyệt vời để kiểm tra xem
    typeof yourVariable === 'object' && yourVariable !== null
    
    80 có phải là đối tượng hay không, một đối tượng có nguồn gốc như
    typeof yourVariable === 'object' && yourVariable !== null
    
    74,
    typeof yourVariable === 'object' && yourVariable !== null
    
    75 hoặc
    typeof yourVariable === 'object' && yourVariable !== null
    
    76.

  • Trong hàm

    typeof yourVariable === 'object' && yourVariable !== null
    
    91, nó kiểm tra
    typeof yourVariable === 'object' && yourVariable !== null
    
    80 là một hàm. Bởi vì, chức năng cũng là một đối tượng, đó là lý do tại sao nó ở đó. Nếu nó không làm điều đó, chức năng sẽ trở lại là sai. Ví dụ:
    typeof yourVariable === 'object' && yourVariable !== null
    
    93 sẽ trả về
    typeof yourVariable === 'object' && yourVariable !== null
    
    21, tuy nhiên bây giờ nó trả về
    // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    8.

  • Người ta luôn có thể thay đổi định nghĩa về một đối tượng là gì. Vì vậy, người ta có thể thay đổi các chức năng này cho phù hợp.


Xét nghiệm

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"
7

Đã trả lời ngày 17 tháng 11 năm 2016 lúc 23:43Nov 17, 2016 at 23:43

Inanc Gumusinanc GumusInanc Gumus

22.8K9 Huy hiệu vàng83 Huy hiệu bạc98 Huy hiệu Đồng9 gold badges83 silver badges98 bronze badges

1

Nếu bạn muốn kiểm tra xem

typeof yourVariable === 'object' && yourVariable !== null
96 cho
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
3 chỉ đến từ
_.isObject = function(obj) {
  return obj === Object(obj);
};
4. Bộ lọc ra
typeof yourVariable === 'object' && yourVariable !== null
26,
typeof yourVariable === 'object' && yourVariable !== null
24,
typeof yourVariable === 'object' && yourVariable !== null
74,
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
02, v.v.

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"
8

Hoặc là hàm mũi tên biểu hiện đơn (ES6+)

> Object.prototype.toString.call(3)
"[object Number]"

> Object.prototype.toString.call(new Number(3))
"[object Number]"
9

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Đã trả lời ngày 16 tháng 4 năm 2018 lúc 14:22Apr 16, 2018 at 14:22

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Sasisasisasi

3242 Huy hiệu bạc9 Huy hiệu đồng2 silver badges9 bronze badges

2

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
0

Tôi được yêu cầu cung cấp thêm chi tiết. Cách kiểm tra sạch và dễ hiểu nhất nếu biến của chúng tôi là một đối tượng là

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
03. Nó trả về một chuỗi với một loại (ví dụ:
typeof yourVariable === 'object' && yourVariable !== null
14,
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
05).

Thật không may hoặc mảng và null cũng có loại

// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
3. Để chỉ lấy các đối tượng thực, cần phải kiểm tra chuỗi kế thừa bằng toán tử
_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};
6. Nó sẽ loại bỏ null, nhưng mảng có đối tượng trong chuỗi kế thừa.

Vì vậy, giải pháp là:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
1

Đã trả lời ngày 10 tháng 6 năm 2016 lúc 7:41Jun 10, 2016 at 7:41

KaniakaniaKania

2.2322 Huy hiệu vàng29 Huy hiệu bạc34 Huy hiệu đồng2 gold badges29 silver badges34 bronze badges

2

Lodash có isplainObject, có thể là những gì mà nhiều người đến trang này đang tìm kiếm. Nó trả về sai khi đưa ra một chức năng hoặc mảng.

Đã trả lời ngày 20 tháng 10 năm 2014 lúc 19:33Oct 20, 2014 at 19:33

PatpatPat

16.1K14 Huy hiệu vàng93 Huy hiệu bạc112 Huy hiệu đồng14 gold badges93 silver badges112 bronze badges

1

Màn biểu diễn

Hôm nay 2020.09.26 Tôi thực hiện các thử nghiệm trên MacOS Highsierra 10.13.6 trên Chrome V85, Safari V13.1.2 và Firefox V80 cho các giải pháp được chọn.

Kết quả

  • Giải pháp C và H là nhanh/nhanh nhất trên tất cả các trình duyệt cho tất cả các trường hợp
  • Giải pháp D và G là chậm/chậm nhất trên tất cả các trình duyệt cho tất cả các trường hợp

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Thông tin chi tiết

Tôi thực hiện 3 trường hợp thử nghiệm cho các giải pháp a b c d e f g h i j k l m n o p q r s t u v

  • Đối với đối tượng nhỏ - bạn có thể chạy nó ở đây
  • Đối với đối tượng lớn - bạn có thể chạy nó ở đây
  • Không có đối tượng - bạn có thể chạy nó ở đây

Dưới đây Snippet trình bày sự khác biệt giữa các giải pháp. Giải pháp A-G đưa ra câu trả lời thích hợp cho các trường hợp được chọn được mô tả bởi Matt Fenwick

Và đây là những kết quả ví dụ cho Chrome

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Đã trả lời ngày 25 tháng 9 năm 2020 lúc 22:41Sep 25, 2020 at 22:41

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Kamil Kiełczewskikamil KiełczewskiKamil Kiełczewski

76.5K26 Huy hiệu vàng339 Huy hiệu bạc316 Huy hiệu Đồng26 gold badges339 silver badges316 bronze badges

Thư viện chức năng Ramda có một chức năng tuyệt vời để phát hiện các loại JavaScript.

Diễn giải toàn bộ chức năng:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
2

Tôi đã phải cười khi tôi nhận ra giải pháp đơn giản và đẹp như thế nào.

Ví dụ sử dụng từ tài liệu Ramda:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
3

Đã trả lời ngày 22 tháng 2 năm 2018 lúc 21:34Feb 22, 2018 at 21:34

DavegauerdavegauerDaveGauer

1.23514 Huy hiệu bạc25 Huy hiệu đồng14 silver badges25 bronze badges

Sau khi đọc và thử rất nhiều triển khai, tôi đã nhận thấy rằng rất ít người cố gắng kiểm tra các giá trị như

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
08,
_.isObject = function(obj) {
  var type = typeof obj;
  return type === 'function' || type === 'object' && !!obj;
};
0,
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
10 hoặc các đối tượng có chuỗi nguyên mẫu dài hơn 1 bước.

Thay vì kiểm tra

typeof yourVariable === 'object' && yourVariable !== null
29 của biến của chúng tôi và sau đó hack các trường hợp cạnh, tôi nghĩ sẽ tốt hơn nếu kiểm tra được giữ đơn giản nhất có thể để tránh phải tái cấu trúc khi có các nguyên thủy hoặc đối tượng gốc mới thêm vào đó là
typeof yourVariable === 'object' && yourVariable !== null
29 của 'sự vật'.

Rốt cuộc, toán tử

typeof yourVariable === 'object' && yourVariable !== null
29 sẽ cho bạn biết nếu có gì đó là đối tượng của JavaScript, nhưng định nghĩa về một đối tượng của JavaScript quá rộng đối với hầu hết các kịch bản trong thế giới thực (ví dụ:
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
14). Dưới đây là một chức năng xác định xem biến
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
15 có phải là một đối tượng bằng cách lặp lại hai lần kiểm tra:is an object to JavaScript, but JavaScript's definition of an object is too broad for most real-world scenarios (e.g.
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
14). Below is a function that determines whether variable
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
15 is an object by essentially repeating two checks:

  1. Một vòng lặp được bắt đầu tiếp tục miễn là phiên bản chuỗi của
    // oops:  isObject(Object.prototype) -> false
    // oops:  isObject(Object.create(null)) -> false
    function isObject(val) {
        return val instanceof Object; 
    }
    
    15 là
    // oops:  isObject(Object.prototype) -> false
    // oops:  isObject(Object.create(null)) -> false
    function isObject(val) {
        return val instanceof Object; 
    }
    
    17. Tôi muốn kết quả của chức năng giống hệt như các bản ghi bên dưới, vì vậy đây là "tính khách quan" duy nhất mà tôi đã kết thúc. Nếu nó thất bại, chức năng trả về sai ngay.
    I wanted the result of the function to be exactly like the logs below, so this is the only "objectness"-criteria I ended up with. If it fails, the function returns false right away.
  2. // oops:  isObject(Object.prototype) -> false
    // oops:  isObject(Object.create(null)) -> false
    function isObject(val) {
        return val instanceof Object; 
    }
    
    15 được thay thế bằng nguyên mẫu tiếp theo trong chuỗi với
    // oops:  isObject(Object.prototype) -> false
    // oops:  isObject(Object.create(null)) -> false
    function isObject(val) {
        return val instanceof Object; 
    }
    
    19, nhưng cũng được đánh giá trực tiếp sau. Khi giá trị mới của
    // oops:  isObject(Object.prototype) -> false
    // oops:  isObject(Object.create(null)) -> false
    function isObject(val) {
        return val instanceof Object; 
    }
    
    15 là
    // these 5 examples throw exceptions
    Object.getPrototypeOf(null)
    Object.getPrototypeOf(undefined)
    Object.getPrototypeOf(3)
    Object.getPrototypeOf('abc')
    Object.getPrototypeOf(true)
    
    // these 5 examples don't throw exceptions
    Object.getPrototypeOf(Object)
    Object.getPrototypeOf(Object.prototype)
    Object.getPrototypeOf(Object.create(null))
    Object.getPrototypeOf([])
    Object.getPrototypeOf({})
    
    0, điều đó có nghĩa là mọi nguyên mẫu bao gồm nguyên mẫu gốc (rất có thể là nguyên mẫu duy nhất trong chuỗi) đã vượt qua kiểm tra trong vòng lặp và chúng ta có thể trả về true. Nếu không, một lần lặp mới bắt đầu.every prototype including the root prototype (which could very well have been the only prototype inside the chain) have passed the check in the while loop and we can return true. Otherwise, a new iteration starts.

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
4

Đã trả lời ngày 10 tháng 9 năm 2019 lúc 2:11Sep 10, 2019 at 2:11

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Gust van de Walgust van de WalGust van de Wal

5.1031 Huy hiệu vàng21 Huy hiệu bạc45 Huy hiệu đồng1 gold badge21 silver badges45 bronze badges

Khi mọi thứ khác thất bại, tôi sử dụng điều này:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
5

Đã trả lời ngày 18 tháng 9 năm 2014 lúc 18:42Sep 18, 2014 at 18:42

MichalmichalMichal

Huy hiệu Bạc 1311 Huy hiệu đồng1 silver badge1 bronze badge

5

Điều này sẽ hoạt động. Đó là một chức năng trả về đúng, sai hoặc có thể là null.

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
6

Đã trả lời ngày 5 tháng 4 năm 2017 lúc 6:41Apr 5, 2017 at 6:41

Pizzarobpizzarobpizzarob

11.3k6 Huy hiệu vàng46 Huy hiệu bạc67 Huy hiệu Đồng6 gold badges46 silver badges67 bronze badges

1

Vì có vẻ như rất nhiều sự nhầm lẫn về cách xử lý vấn đề này một cách chính xác, tôi sẽ để lại 2 xu của mình (câu trả lời này tuân thủ thông số kỹ thuật và tạo ra kết quả chính xác trong mọi trường hợp):

Thử nghiệm cho nguyên thủy:

_.isObject = function(obj) {
  return obj === Object(obj);
};
0
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
24
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
25
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
26

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
7

Một đối tượng không phải là nguyên thủy:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
8

Hay cách khác:

function isObject(val) {
    if (val === null) { return false;}
    return ( (typeof val === 'function') || (typeof val === 'object') );
}
9

Kiểm tra cho bất kỳ mảng nào:

function isObject(obj) {
  return obj === Object(obj);
}
0

Kiểm tra đối tượng không bao gồm:

typeof yourVariable === 'object' && yourVariable !== null
75
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
28
typeof yourVariable === 'object' && yourVariable !== null
25
typeof yourVariable === 'object' && yourVariable !== null
24
typeof yourVariable === 'object' && yourVariable !== null
26
_.isObject = function(obj) {
  return obj === Object(obj);
};
5 Bất kỳ mảng nào

function isObject(obj) {
  return obj === Object(obj);
}
1

Đã trả lời ngày 12 tháng 11 năm 2018 lúc 14:06Nov 12, 2018 at 14:06

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

c7x43tc7x43tc7x43t

2642 Huy hiệu bạc5 Huy hiệu Đồng2 silver badges5 bronze badges

Với mục đích của mã của tôi, tôi đã phát hiện ra quyết định này tương ứng với một số câu trả lời ở trên:

Biến thể ES6:

function isObject(obj) {
  return obj === Object(obj);
}
2

Biến thể ES5:

function isObject(obj) {
  return obj === Object(obj);
}
3

Bạn có thể sử dụng nó rất đơn giản:

function isObject(obj) {
  return obj === Object(obj);
}
4

và như thế..

Đã trả lời ngày 23 tháng 6 năm 2020 lúc 10:29Jun 23, 2020 at 10:29

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

ChristiyanchristiyanChristiyan

3374 Huy hiệu bạc4 Huy hiệu đồng4 silver badges4 bronze badges

2

function isObject(obj) {
  return obj === Object(obj);
}
5

// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
33 là tốc ký để kiểm tra xem
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
34 có phải là sự thật không (để lọc ra
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0)

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Đã trả lời ngày 16 tháng 12 năm 2014 lúc 0:49Dec 16, 2014 at 0:49

IrairaIra

7368 Huy hiệu bạc7 Huy hiệu đồng8 silver badges7 bronze badges

Đó là một câu hỏi cũ nhưng được cho là để lại ở đây. Hầu hết mọi người đang kiểm tra xem biến có phải là

typeof yourVariable === 'object' && yourVariable !== null
30 có nghĩa là một giá trị khóa được ghép nối không và không phải là cấu trúc gạch chân mà JavaScript đang sử dụng cho một thứ nhất định, vì trung thực tất cả mọi thứ trong JavaScript là một đối tượng. Vì vậy, lấy nó ra khỏi đường đi. Nếu bạn làm...

function isObject(obj) {
  return obj === Object(obj);
}
6

Hầu hết thời gian những gì chúng tôi muốn là biết nếu chúng tôi có đối tượng tài nguyên từ API hoặc cuộc gọi cơ sở dữ liệu của chúng tôi được trả về từ ORM. Sau đó chúng ta có thể kiểm tra nếu không phải là

typeof yourVariable === 'object' && yourVariable !== null
74, không phải là
// these 5 examples throw exceptions
Object.getPrototypeOf(null)
Object.getPrototypeOf(undefined)
Object.getPrototypeOf(3)
Object.getPrototypeOf('abc')
Object.getPrototypeOf(true)

// these 5 examples don't throw exceptions
Object.getPrototypeOf(Object)
Object.getPrototypeOf(Object.prototype)
Object.getPrototypeOf(Object.create(null))
Object.getPrototypeOf([])
Object.getPrototypeOf({})
0, không phải là loại
// oops:  isObject(Object.prototype) -> false
// oops:  isObject(Object.create(null)) -> false
function isObject(val) {
    return val instanceof Object; 
}
39 và là một
_.isObject = function(obj) {
  return obj === Object(obj);
};
4

function isObject(obj) {
  return obj === Object(obj);
}
7

Đã trả lời ngày 27 tháng 11 năm 2019 lúc 18:28Nov 27, 2019 at 18:28

Hướng dẫn what in javascript is not an object? - những gì trong javascript không phải là một đối tượng?

Redeemefyredeemefyredeemefy

4.1236 Huy hiệu vàng34 Huy hiệu bạc 50 Huy hiệu Đồng6 gold badges34 silver badges50 bronze badges

2

function isObject(obj) {
  return obj === Object(obj);
}
8

Dựa trên Lodash

Đã trả lời ngày 12 tháng 4 năm 2020 lúc 21:48Apr 12, 2020 at 21:48

Insigninsigninsign

4.77736 Huy hiệu bạc32 Huy hiệu Đồng36 silver badges32 bronze badges

1

Loại nào không phải là loại đối tượng JavaScript?

Chắc chắn, Null không phải là một đối tượng.Nó là một giá trị đặc biệt với một loại riêng của riêng nó.Hành vi của loại hình là sai ở đây.Kết quả của cảnh báo loại là "chức năng", vì cảnh báo là một hàm.null is not an object. It is a special value with a separate type of its own. The behavior of typeof is wrong here. The result of typeof alert is "function" , because alert is a function.

Điều nào sau đây không phải là đối tượng?

Giải pháp (theo nhóm kiểm tra) Không có đối tượng gọi là vị trí.Position.

Các đối tượng của JavaScript là gì?

Trong JavaScript, một đối tượng là một thực thể độc lập, với các thuộc tính và loại.So sánh nó với một cốc, ví dụ.Một cốc là một đối tượng, với các thuộc tính.Một cốc có màu, thiết kế, trọng lượng, một vật liệu được làm bằng, v.v.a standalone entity, with properties and type. Compare it with a cup, for example. A cup is an object, with properties. A cup has a color, a design, weight, a material it is made of, etc.

Chuỗi không phải là một đối tượng?

Một chuỗi là một đối tượng của chuỗi loại có giá trị là văn bản. of type String whose value is text.