data: function () { return { cityData: cityData, selectedOptions:this.source[this.schema_key] } }
console上面的this.source[this.schema_key]如下
[24, 81, __ob__: Observer]
有麼有一種方式可以直接這樣取得這樣資料
[24, 81]
__ob__: Observer這些資料是vue這個框架對資料設定的監控器,一般都是不可枚舉的。
__ob__: Observer
console.log这样的打印函数,被打印的变量会执行自身的toString(),這樣,即便內部屬性是不可枚舉,實際上也能看到。舉個例子:
console.log
toString()
const obj = { a: 0, b: 1 }; Object.defineProperty(obj, 'b', { writable: false, enumerable: false, configurable: false }); console.log(obj); // Object {a: 0, b: 1}
因為你已經將資料綁定在了vue之中,vue就肯定要為資料添加監控器的,如果你強制刪掉了這些監控器,那麼這些資料也就失去了監控,那麼你使用vue的意義何在…
如果只是去掉這些監視器而不考慮後果的話,把物件複製一份就行了,因為複製的物件是不包含不可枚舉屬性的。
const obj1 = { a: 0, b: 1 }; Object.defineProperty(obj1, 'b', { writable: false, enumerable: false, configurable: false }); const obj2 = Object.assign({}, obj1); console.log(obj2); // Object {a: 0}
js這類動態語言,複製物件是個很頭痛的事情。我寫了一個簡單的,可以參考一下:
//对象深复制,不考虑循环引用的情况 function cloneObj(from) { return Object.keys(from) .reduce((obj, key) => (obj[key] = clone(from[key]), obj), {}); } //数组深复制,不考虑循环引用的情况 function cloneArr(from) { return from.map((n) => clone(n)); } // 复制输入值 function clone(from) { if (from instanceof Array) { return cloneArr(from); } else if (from instanceof Object) { return cloneObj(from); } else { return (from); } } const obj = [ { name: '1' }, { name: '2' } ]; const obj2 = clone(obj); console.log(obj2);
在外面直接用clone()方法就行了。
clone()
這個對數據沒有影響吧~
同樣,求解。 。 。 。
__ob__: Observer
這些資料是vue這個框架對資料設定的監控器,一般都是不可枚舉的。console.log
这样的打印函数,被打印的变量会执行自身的toString()
,這樣,即便內部屬性是不可枚舉,實際上也能看到。舉個例子:因為你已經將資料綁定在了vue之中,vue就肯定要為資料添加監控器的,如果你強制刪掉了這些監控器,那麼這些資料也就失去了監控,那麼你使用vue的意義何在…
如果只是去掉這些監視器而不考慮後果的話,把物件複製一份就行了,因為複製的物件是不包含不可枚舉屬性的。
js這類動態語言,複製物件是個很頭痛的事情。我寫了一個簡單的,可以參考一下:
在外面直接用
clone()
方法就行了。這個對數據沒有影響吧~
同樣,求解。 。 。 。