Как я могу определить, является ли объект Javascript файлом? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть функция, которая управляет объектом, который содержит элемент «upload», имеющий тип File.Я хотел бы обнаружить этот факт, чтобы я мог игнорировать его и пропустить все объекты этого типа.

Я попробовал несколько вещей в консоли, но, похоже, ничего не возвращает "true".Вот расшифровка моих тщетных попыток изнутри точки останова консоли:

> values.avatar
{upload: File}
> values.avatar.upload
File {name: "29_Drawing Hands by Escher.jpg", lastModified: 1446580115000, lastModifiedDate: Tue Nov 03 2015 14:48:35 GMT-0500 (Eastern Standard Time), webkitRelativePath: "", size: 1314300, …}
> values.avatar.upload.isPrototypeOf(File)
false
> File
ƒ File() { [native code] }
> File.prototype
File {constructor: ƒ, …}
values.avatar.upload.isPrototypeOf(File.prototype)
false
> values.avatar.upload.prototype 
undefined
> File.isPrototypeOf
ƒ isPrototypeOf() { [native code] }
> File
ƒ File() { [native code] }
> values.avatar
{upload: File}
> File
ƒ File() { [native code] }
> File.__proto__
ƒ Blob() { [native code] }
> values.avatar.upload.__proto__
File {constructor: ƒ, …}
values.avatar.upload.isPrototypeOf(File.__proto__)
false
> values.avatar.upload.isPrototypeOf(Blob.__proto__)
false

Очевидно, мне не хватает фундаментального понимания того, как нативные типы и прототипы работают в Javascript.

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

чек

values.avatar.upload instanceof File 
0 голосов
/ 03 марта 2019

Вы также можете проверить его по прототипу:

if(values.avatar.upload.prototype === File.prototype) {
  // true
} else {
 // false
}

Например, вы можете использовать:

File.prototype.isPrototypeOf(values.avatar.upload)

Например.следующее вернет true:

var file = new File([""], 'text.txt');
console.log(File.prototype.isPrototypeOf(file));
0 голосов
/ 03 марта 2019

Вы можете проверить это, используя instanceof ключевое слово.

if (values.avatar.upload instanceof File)
  // yes, it's a File type.
else
  // no, it's not.
...