类型,值和变量

烂漫一生 提交于 2019-11-28 12:23:50

 

1 巧转类型

js是弱类型语言

两个操作数,一个是数字,一个是字符串时: - 运算    +拼接

将变量 a 转为字符串 :a+"";

将变量 a 转为数字 : a-0;

2 ==

类型不同,尝试类型转换和比较

null==undefined //true

object == number | sring :尝试将对象转为基本类型   new String('hi')=='hi' //true

new Object ==new Object

3 ===

new Object !== new Object//对象比较比的的是引用

4 包装对象

var a = "string";

console.log(a.length)  //6

a.num=10;

console.log(a.num) //undefined

 

 

5 类型判断操作符

(1)typeof判断 返回一个字符串,适合基础数据类型和函数对象

typeof null //object     历史原因.如果修改,大量网站无法访问.兼容问题

(2)instanceof  基于原型链判断的操作符

期望左操作数是对象,否则false,期望右操作数是函数对象或函数构造器,否则抛出typeErr异常

大概原理:判断左操作数的对象的原型链是否有右对象的prototype属性

myobj instanceof Object

[1,2] instanceof Array //

new Object instanceof Array //false

 

 

类型检测小结:

typeof:适合基本类型及function检测,遇到null失效

Object.prototype.toString.call( myobj ):适合内置对象和基元类型,遇到null和undefined失效(IE678等返回[Object Object])  例 Object.prototype.toString.call([1,2]) // "[Objext Array]"

instanceof:适合自定义对象,也可用来检测原生对象,在不同window和iframe间检测时失效. 例: [] instanceof Array //true

判断日期对象:

new Date() instanceof Date //true

Object.prototype.toString.call(new Date())    //"[object Date]"

判断window对象:

Object.prototype.toString.call(window)     //"[object Window]"

window instanceof Window   //true

判断数组

[] instanceof Array //true

Object.prototype.toString.call([])   //"[object Array]"

判断自定义对象

var a={};  a instanceof Object  //true  注:这个如果直接{ a:1}  instanceof Object会报错

Object.prototype.toString.call({})   //"[object Object]"

判断null

var a; a===null //true说明变量是null,false说明不是

String,Boolean,Number,undefined,Function 用typeof就可判断

function typeTest(myobj){
            var type=typeof myobj;
            if(type=="object"){
                if(myobj===null){
                    return "null";
                }
                if(myobj instance of Array){
                    return "Array"
                }
                if(Object.prototype.toString.call(myobj)=="[Object Date]"){
                  return "Date"
                }
                if(myobj instanceof Window){
                    return "window"
                }
                return "object";
            }
            return type; //String,Boolean,Number,undefined,Function
        }

 

练习:

请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似。具体需求:

1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。

2. 数组的长度一致。

3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.

当以上全部满足,则返回"判定结果:通过",否则返回"判定结果:不通过"

 /*
         * param1 Array
         * param2 Array
         * return true or false
         */
        function arraysSimilar(arr1, arr2){
            var respass="判定结果:通过",
                resunpass="判定结果:不通过";
            if(arr1 instanceof Array && arr2 instanceof Array){
                    if(arr1.length!=arr2.length){
                       return resunpass;
                    }
                    var arr1type=[],arr2type=[];
                    pushtype(arr1type,arr1)
                    pushtype(arr2type,arr2)
                    arr1type.sort();
                    arr2type.sort();
                    for(var i=0;i<arr1type.length;i++){
                        if(arr1type[i]!=arr2type[i]){
                            return resunpass
                        }
                    }
                    return respass;
                }
                
                
            }else{
                return resunpass;
            }
        
        }
        function typeTest(myobj){
            var type=typeof myobj;
            if(type=="object"){
                if(myobj===null){
                    return "null";
                }
                if(myobj instance of Array){
                    return "Array"
                }
                if(Object.prototype.toString.call(myobj)=="[Object Date]"){
                  return "Date"
                }
                if(myobj instanceof Window){
                    return "window"
                }
                return "object";
            }
            return type;
        }
        function pushtype(arrtype,arr){
            for(var i=0;i<arr.length;i++){
            var nowi=arr[i];
            var t=typeTest(nowi);
            arrtype.push(t);
        }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!