一笑·科奉

Vue.js插件中使用typeof(obj) == 'object'报错的解决办法

作者: 一笑, 写于: 2017-09-17 20:18:29

今天在正常写Vue.js插件时,需要判断某个变量是不是object,就很顺手的使用了如下语句:

if(typeof(obj) == 'object'){
    console.log('obj is object');
}

莫名其妙的报错了:

Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'

在网上搜了很久,也没有找出个所以然来。然后把此代码复制到单独的HTML javascript中执行,却可正常执行。

function test(){
	var o = new Object();
	o.a = '1';
	console.log(typeof(o));
	console.log(o);
}
test();

我猜想应该是webpack打包工具导致的报错,于是在百度搜索替代方案:js typeof object

可以使用如下两种方法替代,而且文章说typeof判断变量是否存在或string等还行,判断object或array不建议使用typeof,因为判断不出来,而且null也会被typeof错误的判断为object类型。

可以使用如下两种方式:

  1. obj instanceof Object :返回true或false

  2. Object.prototype.toString.call(obj) == '[object Object]':这种判断方式更为准确,甚至可以判断出什么样的object

但是,在插件中使用typeof(obj) == 'object'为何会报错,我还是一时无法理解,难道是webpack中不允许使用?

原本就打算这样就算了,反正有替代方案就可以,但是紧接着,我就写了一句代码又报同样的错了!

object = JSON.stringify(value);

呃呃呃,实在受不了了,去google了一下,解决办法出奇的简单:

//module.exports = util; //把插件中的这一句换成,下边这一句就可以了!!
export default util;

修改完保存,再次查看,完美解决。

重要的事说三遍:

export default util;

export default util;

export default util;

分类: Vue.js, 浏览: 652, 评论: 0
原创文章转载请注明:转自《一笑·科奉》 原文地址:https://www.kefong.com/post/48.html