|
|
'use strict'; |
|
|
|
|
|
var callBind = require('call-bind'); |
|
|
var callBound = require('call-bind/callBound'); |
|
|
var GetIntrinsic = require('get-intrinsic'); |
|
|
|
|
|
var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); |
|
|
|
|
|
var $byteLength = callBound('ArrayBuffer.prototype.byteLength', true); |
|
|
var $toString = callBound('Object.prototype.toString'); |
|
|
|
|
|
|
|
|
var abSlice = !!$ArrayBuffer && !$byteLength && new $ArrayBuffer(0).slice; |
|
|
var $abSlice = !!abSlice && callBind(abSlice); |
|
|
|
|
|
|
|
|
module.exports = $byteLength || $abSlice |
|
|
? function isArrayBuffer(obj) { |
|
|
if (!obj || typeof obj !== 'object') { |
|
|
return false; |
|
|
} |
|
|
try { |
|
|
if ($byteLength) { |
|
|
|
|
|
$byteLength(obj); |
|
|
} else { |
|
|
|
|
|
$abSlice(obj, 0); |
|
|
} |
|
|
return true; |
|
|
} catch (e) { |
|
|
return false; |
|
|
} |
|
|
} |
|
|
: $ArrayBuffer |
|
|
|
|
|
? function isArrayBuffer(obj) { |
|
|
return $toString(obj) === '[object ArrayBuffer]'; |
|
|
} |
|
|
: function isArrayBuffer(obj) { |
|
|
return false; |
|
|
}; |
|
|
|