关闭

javascript的值与类型

12人阅读 评论(0) 收藏 举报
分类:

javascript的值与类型

/**

 * 主题

 * 1、typeof的用法

 * 2、基本类型,引用类型有哪些

 *    如何判断基本类型和引用类型简单判断

 *

 * 3、instanceof的用法

 * 4、Object.prototype.toString完成类型的判断

 * 5、如何区别数组类型和对象类型

 * 6、NaN

 * 7、undefined和null

 */

 

/*1、typeof

用法1 typeof value === 'xxx';

用法2 typeof( value ) === 'xxx';

*/

// 所有的typeof的测试结果返回的是一个字符串

console.log( typeof( typeof( 1 ) )  );//'string'

 

/*2、引用类型和基本类型*/

// 基本类型

console.log( typeof 1  );//'number'

console.log( typeof '1'  );//'string'

console.log( typeof true  );//'boolean'

console.log( typeof undefined  );//'undefined'

console.log( typeof NaN  );//number

 

// 引用类型

// {} 和 []返回的结果都是object,所以typeof并不能区分两者

console.log( typeof []);//'object'

console.log( typeof {});//'object'

console.log( typeof function(){} );//'function'

 

// 小测试

console.log( typeof 1.2);// 'number'  证明js中并没有浮点型的类型

console.log( typeof null );// 'object' null可能是引用类型

console.log( null === null );// true  null可能是基本类型,所以用typeof判断null的类型不靠谱

console.log( typeof {} );// 'object'

console.log( {} === {} );// false 引用类型的不会等于和自身类似的相等,这里相当于 new Obejct() === new Object()

 

 

/*

3、instanceof的用法

主要用于实例和构造函数之间的判断

*/

 

/*基本值的检测*/

console.log( 1 instanceof Number );// false

console.log( '1' instanceof String );// false

console.log( true instanceof Boolean );// false

console.log( null instanceof Object);// false

console.log( undefinedinstanceof Object );// false

 

 

/*引用类型的检测*/

console.log( []instanceof Array);// true

console.log( {}instanceof Object );// true

console.log( function(){} instanceof Function );// true

 

/*将基本值转换成对象后 instanceof操作就起判断类型的作用了*/

console.log( 1instanceof Number );// false  因为此时的1是一个基本类型,而非一个数值类对象

console.log( new Number(1) instanceof Number );//true  此时的1被转换成数值对象了

console.log( 1 === 1 );//true

console.log( 1 === new Number(1) );//false

console.log( new Number(1) === new Number(1) );//false

// 这里可以解释'abc'.length 'abc'明明只是一个基本类型,为什么能够访问到length属性呢?原因只可能是在调用length属性之前,'abc'被隐式转化成字符串对象,只有对象才会有方法和属性

 

 

/*{}和[]通过instanceof的结果*/

console.log({} instanceof Object);//true

console.log({} instanceof Array);//false;

console.log([] instanceof Object);//true

console.log([] instanceof Array);//true

// 还是不能使用instanceof进行类型的区别

 

/*4、Object.prototype.toString.call进行类型的判断*/

// 即使你传入一个基本类型去调用toString方法,也会返回对应的值类型回来

console.log(Object.prototype.toString.call( 1));//'[object Number]'

console.log(Object.prototype.toString.call( 1.2));//'[object Number]'

console.log(Object.prototype.toString.call( '1'));//'[object String]'

console.log(Object.prototype.toString.call( true));//'[object Boolean]'

// 可以利用这个特性进行数组和对象两者之间的区分

console.log(Object.prototype.toString.call( []));//'[object Array]'

console.log(Object.prototype.toString.call( {}));//'[object Object]'

 

console.log(Object.prototype.toString.call( function(){} ));//'[object Function]'

console.log(Object.prototype.toString.call( null));//'[object Null]'

console.log(Object.prototype.toString.call( undefined));//'[object Undefined]'

 

/*5、如何区别数组类型和对象类型*/

function isArray(a){

if(Array.isArray){//es5提供的原生判断方法

return Array.isArray(a);

}else{

Object.prototype.toString.call(a) === '[object Array]';

}

}

 

/*6、NaN*/

console.log(NaN === NaN);//false;

function isReallyNaN(v){

return (v === v) === false;

}

var res = isReallyNaN(NaN);

console.log(res);//true

 

// js原生的isNaN函数在判断之前会将参数值先进行一次隐式转换,所以用isNaN来进行判断并不靠谱

console.log(isNaN('xxx'));//true

 

/*7、undefined和null*/

var a ;//变量在声明的时候默认值为undefined

console.log(a);//undefined

 

console.log(typeof undefined);//undefined

console.log(typeof null);//object

 

console.log(Object.prototype.toString.call(undefined));// [object Undefined]

console.log(Object.prototype.toString.call(null));// [object Null]

 

// null到底是不是基本类型

console.log(undefined instanceof Object);//false

console.log(null instanceof Object);//false 证明null是属于基本类型

console.log(null.constructor);// undefined 证明null不是引用类型

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12次
    • 积分:10
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行
    评论排行