vue随笔之二类型判断一
若有不足,敬请指出。打开vue.js,开始就是类型判断,总所周知,vue是一门弱类型语言,所以加上类型判断势在必行。/*** 判断是否为undefined或者null*/function isDef(v){return v === undefined || v === null;}/*** 判断是否不为undefined或者null*/function isD...
若有不足,敬请指出。
打开vue.js,开始就是类型判断,总所周知,vue是一门弱类型语言,所以加上类型判断势在必行。
/**
* 判断是否为undefined或者null
*/
function isDef(v){
return v === undefined || v === null;
}
/**
* 判断是否不为undefined或者null
*/
function isDef(v){
return v !== undefined || v !== null;
}
/**
* 判断是否为true
*/
function isTrue(v){
return v === true;
}
/**
* 判断是否为false
*/
function isFalse(v){
return v === false;
}
/**
* 判断是否为原始类型:字符串、数字或者布尔类型,以及es6新出的symbol类型
*/
function isObject(obj){
return typeof obj === 'string' ||
typeof obj === 'number' ||
typeof obj === 'symbol' ||
typeof obj === 'boolean'
}
以上类型比较简单,下面将介绍以下几种类型:
var _toString = Object.prototype.toString;
function toRawType(value){
return _toString.call(value).slice(8,-1)
}
首先,定义私有属性_toString为Object原型上的方法toString。_toString.call(value).slice(8,-1)可以分为两步:
1、var str =_toString.call(value);
2、str.slice(8,-1);
类型判断在 web 开发中有非常广泛的应用,简单的有判断数字还是字符串,进阶一点的有判断数组还是对象,再进阶一点的有判断日期、正则、错误类型,再再进阶一点还有比如判断 plainObject、空对象、Window 对象等等。
在这里,我们不仅有个疑问,为什么不用typeof呢,typeof能检测六种基本类型和function(symbol是es6新出的,这里不做介绍,有兴趣的可以底下搜集资料),可以typeof null为object,typeof new Date()等new出来的对象都为 object类型。可谓漏洞百出。而Object.prototype.toString就是更好的方法。
当 toString 方法被调用的时候,下面的步骤会被执行:
1、如果 this 值是 undefined,就返回 [object Undefined]
2、如果 this 的值是 null,就返回 [object Null]
3、让 O 成为 ToObject(this) 的结果
4、让 class 成为 O 的内部属性 [[Class]] 的值
5、最后返回由 "[object " 和 class 和 "]" 三个部分组成的字符串
通过规范,我们至少知道了调用 Object.prototype.toString 会返回一个由 "[object " 和 class 和 "]" 组成的字符串,而 class 是要判断的对象的内部属性。正是因为这种特性,我们可以用 Object.prototype.toString 方法识别出14种类型;
var num = 1; // [object Number]
var str = '123'; // [object String]
var flag = true; // [object Boolean]
var def = undefined; // [object Undefined]
var null = null; // [object Null]
var obj = {a: 1} // [object Object]
var arr = [1, 2, 3]; // [object Array]
var date = new Date(); // [object Date]
var err = new Error(); // [object Error]
var reg = /a/g; // [object RegExp]
var fn = function a(){}; // [object Function]
console.log(Object.prototype.toString.call(Math)); // [object Math]
console.log(Object.prototype.toString.call(JSON)); // [object JSON]
function func() {
console.log(Object.prototype.toString.call(arguments)); // [object Arguments]
}
func();
现在再来看我们的第一步_toString.call(value),也就是转化为类似[object Object],而第二步就是把[object Object]slice成Object,String,Date等
更多推荐
所有评论(0)