From 6e41d7d12c548a86f4139e870f0f44a5050f2287 Mon Sep 17 00:00:00 2001 From: Michael Jackson Date: Mon, 19 May 2014 07:41:09 -0700 Subject: [PATCH] Use safer isArray `object instanceof Array` is not safe in multi-frame environments. See http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/ for more information. --- js/ReactFireMixin.js | 2 +- js/ReactFireMixin.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/js/ReactFireMixin.js b/js/ReactFireMixin.js index 0e82df6e..ba3b7d3e 100644 --- a/js/ReactFireMixin.js +++ b/js/ReactFireMixin.js @@ -62,7 +62,7 @@ var ReactFireMixin; /*************/ /* Returns true if the inputted object is a JavaScript array */ _isArray: function(obj) { - return (obj && typeof obj === "object" && obj instanceof Array); + return Object.prototype.toString.call(obj) === "[object Array]"; }, /* Converts a Firebase object to a JavaScript array */ diff --git a/js/ReactFireMixin.min.js b/js/ReactFireMixin.min.js index 0399e7d8..ae7a167b 100644 --- a/js/ReactFireMixin.min.js +++ b/js/ReactFireMixin.min.js @@ -1 +1 @@ -var ReactFireMixin;!function(){"use strict";ReactFireMixin={componentWillMount:function(){this.firebaseRefs={}},componentWillUnmount:function(){for(var i in this.firebaseRefs)this.firebaseRefs.hasOwnProperty(i)&&this.unbind(i)},bindAsArray:function(i,e){this._bind(i,e,!0)},bindAsObject:function(i,e){this._bind(i,e,!1)},_bind:function(i,e,n){this.firebaseRefs[e]=i,i.on("value",function(i){var t={};t[e]=n?this._toArray(i.val()):i.val(),this.setState(t)}.bind(this))},unbind:function(i){this.firebaseRefs[i].off("value"),delete this.firebaseRefs[i]},_isArray:function(i){return i&&"object"==typeof i&&i instanceof Array},_toArray:function(i){var e=[];if(i)if(this._isArray(i))e=i;else if("object"==typeof i)for(var n in i)i.hasOwnProperty(n)&&e.push(i[n]);return e}}}(),"undefined"!=typeof module&&(module.exports=ReactFireMixin); \ No newline at end of file +var ReactFireMixin;!function(){"use strict";ReactFireMixin={componentWillMount:function(){this.firebaseRefs={}},componentWillUnmount:function(){for(var i in this.firebaseRefs)this.firebaseRefs.hasOwnProperty(i)&&this.unbind(i)},bindAsArray:function(i,t){this._bind(i,t,!0)},bindAsObject:function(i,t){this._bind(i,t,!1)},_bind:function(i,t,e){this.firebaseRefs[t]=i,i.on("value",function(i){var n={};n[t]=e?this._toArray(i.val()):i.val(),this.setState(n)}.bind(this))},unbind:function(i){this.firebaseRefs[i].off("value"),delete this.firebaseRefs[i]},_isArray:function(i){return"[object Array]"===Object.prototype.toString.call(i)},_toArray:function(i){var t=[];if(i)if(this._isArray(i))t=i;else if("object"==typeof i)for(var e in i)i.hasOwnProperty(e)&&t.push(i[e]);return t}}}(),"undefined"!=typeof module&&(module.exports=ReactFireMixin); \ No newline at end of file