资讯专栏INFORMATION COLUMN

js基础(一):判断类型

hightopo / 855人阅读

摘要:注意类继承时的问题继承自方法中对象直接继承和间接继承的都会报解决的问题通常是让对象的手动指向自己将自己的类赋值给对象的属性基类不会报了原博参考,,,,判断为

js基础(二):构造函数与原型

一、常见实例 判断是否为对象
let obj = {}

// 1.Object.prototype.toString

if (Object.prototype.toString.call(obj) === "[Object Object]") {
    console.log("对象!")
}

// 2.constructor

if (obj.constructor === Object) {
    console.log("对象!")
}

// 3.$.type() 

if ($.type(obj) === "object") {
    console.log("对象!")
}

// 4.$.isPlainObject() , 用于判断指定参数是否是一个纯粹的对象

if ($.isPlainObject(obj) === "object") {
    console.log("对象!")
}
判断对象是否为空对象
let obj = {}

// 1.JSON

if (JSON.stringify(obj) === "{}") {
    console.log("空对象!")
}

// 2.Object.keys(), es6方法会返回一个由一个给定对象的自身可枚举属性组成的数组

if (Object.keys(obj).length === 0) {
    console.log("空对象!")
}

// 3.循环

for (var i in obj) { 
    return true // 不为空
}
return false // 空对象

// 4. $.isEmptyObject(), 该对象没有属性可以通过for...in迭代

if ($.isEmptyObject(obj)) {
    console.log("空对象!")
}
判断是否为数组
let arr = []

// 1.Object.prototype.toString

if (Object.prototype.toString.call(arr) === "[object Array]") {
    console.log("数组!")
}

// 2.constructor

if (arr.constructor === Array) {
    console.log("数组!")
}

// 3.$.type() 

if ($.type(arr) === "array") {
    console.log("数组!")
}

// 4.Array.isArray, 当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测iframes

if (arr instanceof Array === true) {
    console.log("数组!")
}
//Array.isArray是ES 5.1推出的,不支持IE6~8。假如不存在 Array.isArray(),则在其他代码之前运行下面的代码将创建该方法
if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === "[object Array]";
  };
}

// 5.instanceof

if (arr instanceof Array === true) {
    console.log("数组!")
}
判断是否为数组是否为空数组
let arr = []

// 1.length,简易版,已知为数组

if (arr && arr.length > 0) {
    console.log("不为空数组!")
} else {
    console.log("空数组!")
}

// 2.Object.prototype.isPrototypeOf,测试一个对象是否存在于另一个对象的原型链上

if (Object.prototype.isPrototypeOf(arr) && Object.keys(arr).length === 0) {
    console.log("空数组!")
}

// 3.Array.isArray,同样存在兼容问题

if (Array.isArray(arr) && arr.length === 0) {
    console.log("空数组!")
}
判断字符串为json
function isJSON(str) {
    if (typeof str == "string") {
        try {
            var obj=JSON.parse(str);
            if(typeof obj == "object" && obj ){
                return true; // 可转
            }else{
                return false;// 不可转
            }

        } catch() {
            return false; // 不可转
        }
    }
    console.log("It is not a string!")
}
判断字符串是否为数字
let num = "3"

// 1.isNaN, null、空格以及空串会被按照0来处理

if ((!isNaN(num)) && num != null && num != "") {
    console.log("num为数字!")
}

// 2.正则

function isNumber(val) {
    var regPos = /^d+(.d+)?$/; //非负浮点数
    var regNeg = /^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
    if(regPos.test(val) || regNeg.test(val)) {
        return true;
    } else {
        return false;
    }
}
判断某值为null或者为undefined
// jquery源码推荐写法,省代码
var obj = {}
if(obj.a == null) {
    //相当于obj.a === null || obj.a === undefined
}

二、五大常见方法 1.typeof

操作符返回一个字符串,表示未经计算的操作数的类型,用于除null、对象和数组之外的通用类型的判断方法

2.Object.prototype.toString

原生原型扩展函数,用来精确的区分数据类型,万能

3.$.type()

用于确定JavaScript内置对象的类型,并返回小写形式的类型名称,万能

4.instanceof

该运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置,用于检测引用类型的判断方法,针对Array和RegExp进行判断。

5.constructor

该属性返回对创建此对象的数组函数的引用,每个具有原型的对象都会自动获得constructor属性。

注意: 类继承时的问题

 function A(){};

 function B(){};

 A.prototype = new B(); //A继承自B

 var aObj = new A();

 alert(aobj.constructor === B) //true;

 alert(aobj.constructor === A) //false;

//instanceof方法中对象直接继承和间接继承的都会报true

alert(aobj instanceof B) //true;

alert(aobj instanceof A) // true;

//解决construtor的问题通常是让对象的constructor手动指向自己

aobj.constructor = A; //将自己的类赋值给对象的constructor属性

alert(aobj.constructor === A) // true;

alert(aobj.constructor === B) // false;基类不会报true了;

原博:https://blog.csdn.net/u011684...

参考:typeof,instanceof,$.type][9],[$.isPlainObject(),判断为json

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109352.html

相关文章

  • Js基础知识() - 变量

    摘要:内置函数和对象中内置了一些函数和对象,很多语言都会有内置的方法,直接可以调用开发。根据语法标准提供的内置函数包括和。注意基础语法提供的内置函数和方法只有这些,像那是浏览器提供给我们的。强制类型转换大家应该都知道。 js基础 - 变量 *大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源、书籍、课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量...

    leone 评论0 收藏0
  • Js基础知识() - 变量

    摘要:内置函数和对象中内置了一些函数和对象,很多语言都会有内置的方法,直接可以调用开发。根据语法标准提供的内置函数包括和。注意基础语法提供的内置函数和方法只有这些,像那是浏览器提供给我们的。强制类型转换大家应该都知道。 js基础 - 变量 *大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源、书籍、课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量...

    MageekChiu 评论0 收藏0
  • JS基础知识 --变量类型和计算

    摘要:逻辑运算判断一个变量会被当做还是内置函数和对象中内置了一些函数和对象,直接可以调用开发。根据提供的内置函数包括和。注意基础语法提供的内置函数和方法只有这些,像那是浏览器提供给我们的。 变量类型和计算 1. 变量类型 js变量类型分为基本类型(或者叫值类型)和引用类型。(按照存储方式区分)• 值类型 值类型:Number、String、Boolean、Null、Undefiend;...

    levy9527 评论0 收藏0
  • 基础JS数据类型

    摘要:本文章主要总结一下数据类型的识别判断方法最后封装一个函数,可以判别所有的类型数据类型基本类型类型该类型只有一个值,即小写,在使用声明变量但是未对其加以初始化时,这个变量的值就是。 *本文章主要总结一下js数据类型的识别判断方法tyoeofinstanceofObject.prototype.toString.callconstructor最后封装一个函数,可以判别所有的类型* 1.数据...

    codecook 评论0 收藏0

发表评论

0条评论

hightopo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<