关闭

题目:js类型判断

标签: javascript
297人阅读 评论(0) 收藏 举报
分类:

**任务
请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似。具体需求:
1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
2. 数组的长度一致。
3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.**

思路:
1.先判断两个数组是不是数组类型
2.再判断两个数组的长度是不是一致
3.建一个类型对象数组obj,初始化为零。

var obj={
            'number':0,
            'string':0,
            'boolean':0,
            'undefined':0,
            'null':0,
            'function':0,
            'date':0,
            'object':0,
            'window':0
                };

4.第一个数组arr1,遍历,遇到一个元素,把相应的类型在obj中加一
5.第二个数组arr2,遍历,遇到一个元素,把相应的类型在obj中减一
6.最后判断是不是obj里面所有键都值为0。

    function check(i){
        //除了function 其他的引用类型用instanceof来判定
        if(i instanceof Date){
            return 'date';
        }
        else if(i instanceof Window){
            return 'window';
        }
       // typeof可以判断基本类型(number string boolean null(typeof 返回object) undefined )和引用类型的function类型
        if(typeof i === 'number')return 'number';
        else if(typeof i === 'string')return 'string';
        else if(typeof i === 'boolean')return 'boolean';
        else if(typeof i === 'function')return 'function';
        //typeof null 返回 object
        else if(typeof i === 'object'){
            if(i === null){
                return 'null';
            }else{
                return 'object';
            }
        }
        else if(typeof i === 'undefined'){
            return 'undefined';
        }
    }
    function arraysSimilar(arr1, arr2){
        if(!arr1||!arr2){return false;}
        if(!(arr1 instanceof Array )||!(arr2 instanceof Array))return false;
        if(arr1.length!=arr2.length)return false;
        var obj={
            'number':0,
            'string':0,
            'boolean':0,
            'undefined':0,
            'null':0,
            'function':0,
            'date':0,
            'object':0,
            'window':0
                };
        for(var i=0;i<arr1.length;i++){

            var r1=check(arr1[i]);
            var r2=check(arr2[i]);
            obj[r1]++;
            obj[r2]--;
        }
        for(var o in obj){
            if(obj[o]!=0)return false;
        }
        return true;

    }

测试用例:

  var cases=[{
        arr1:[1,true,null],
        arr2:[null,false,100],
        expect:true
    },{
        arr1:[function(){},100],
        arr2:[100,{}],
        expect:false
    },{
        arr1:[null,999],
        arr2:[{},444],
        expect:false
    },{
        arr1:[window,1,true,new Date(),"hahaha",(function(){}),undefined],
        arr2:[undefined,(function(){}),"okokok",new Date(),false,2,window],
        expect:true
    },{
        arr1:[new Date()],
        arr2:[{}],
        expect:false
    },{
        arr1:[window],
        arr2:[{}],
        expect:false
    },{
        arr1:[undefined,1],
        arr2:[null,2],
        expect:false
    },{
        arr1:[new Object,new Object,new Object],
        arr2:[{},{},null],
        expect:false
    },{
        arr1:null,
        arr2:null,
        expect:false
    },{
        arr1:[],
        arr2:undefined,
        expect:false
    },{
        arr1:"abc",
        arr2:"cba",
        expect:false
    }];

    for(var i=0;i<cases.length;i++) {
        console.log(cases[i].arr1,cases[i].arr2);
        console.log(arraysSimilar(cases[i].arr1, cases[i].arr2));
        console.log(cases[i].expect);
    }

除了instanceof和typeof,用Object.prototype.toString.call(obj)和duck type(就是看有没有这个类型的固有属性,比如要判断数组,就看有没有arr.map等)来判定。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

JavaScript——判断js数据类型(类型检测)

1、typeof运算符 typeof算是最常见的了,使用它会返回一个字符串,适合函数对象和基本类型(js中的基本类型:number、string、boolean、null、undefined、object[对象])的判断。 console.log("测试number:"+ty...
  • yCharlee
  • yCharlee
  • 2016-09-03 18:07
  • 3966

js如何判断客户端类型

在同花顺面试,被问到的题目。很尴尬没有说出来,故搜集总结如下: 原理:JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本。JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属性来分辨,另一种是通过分析浏览器的...
  • Johnny0991
  • Johnny0991
  • 2016-06-27 22:31
  • 1053

[JS基础] 之类型判断

首先需要特别说明的是,JavaScript 是面向对象的编程语言 (OOP)。 既然是面向对象的编程语言,自然就可以不同类型的对象。 那在JavaScript 中, 有哪些对象类型呢? 这些类型的对象之间如何区别呢?
  • oscar999
  • oscar999
  • 2014-04-24 18:00
  • 3421

js判断对象是否属于Date类型并进行转换

需求说明:前后台交互时,将后台的List集合封装为json传回前端js。而集合中的实体有字段类型为java.util.Date类型。那么后台返回的json对象到前台后 ,此值会为Object,如果直接解析到此值alert出来(或者是显示在页面上),会是显示[object Object].我需要遍历j...
  • xjdAlan
  • xjdAlan
  • 2013-09-06 09:05
  • 4668

js数据类型判断和数组判断

写在开篇: 昨天面试发现一个十分非常简单的问题竟然没有回答上来,可能也确实是因为太紧张了,感觉被自己蠢哭了。后来想想还是应该认真记录一下,这样才能印象深刻。革命尚未成功,壮实仍需努力!1. js六大数据类型number:数字,整数、浮点数等等, string:单引号或者双引号来说明, Boolea...
  • xiaguangzhiying
  • xiaguangzhiying
  • 2016-03-29 11:14
  • 2237

javascript中对变量类型的判断

在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String;复杂数据类型是Object,Object中还细分了很多具体的类型,比如:Array, Function, Date等等。今天我们就来探讨一下...
  • bsj911gtaaa
  • bsj911gtaaa
  • 2015-07-05 13:07
  • 1103

js如何判断变量的数据类型?

转自:http://www.cnblogs.com/mofish/p/3388427.html js数据类型判断和数组判断 这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧   js六大数据类型:number、string、objec...
  • suyu_yuan
  • suyu_yuan
  • 2017-02-21 14:36
  • 359

JavaScript判断浏览器类型及版本(整理)

你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器。        几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的Chrome浏览器。由于C...
  • sunny243788557
  • sunny243788557
  • 2016-10-13 21:01
  • 2738

JS判断数据类型的三种方法

JavaScript 中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Function,Array,Date,... typeof typeof ...
  • donggx
  • donggx
  • 2017-05-09 14:01
  • 1160

[JS]js中判断变量类型函数typeof的用法汇总

1、作用: typeof 运算符返回一个用来表示表达式的数据类型的字符串。  可能的字符串有:"number"、"string"、"boolean"、"object"、"function" ...
  • szwangdf
  • szwangdf
  • 2015-01-08 14:28
  • 17599
    个人资料
    • 访问:134489次
    • 积分:2887
    • 等级:
    • 排名:第14229名
    • 原创:160篇
    • 转载:20篇
    • 译文:0篇
    • 评论:21条
    最新评论