javascript的值与类型

原创 2017年01月03日 22:58:56

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不是引用类型

JavaScript的值与类型

本文主要来自GitHub中作者开放的文档 在此书之前第一章中已经提到过,JavaScript中的值有类型之分,而变量是不存在类型的,目前JavaScript拥有如下几种类型,区分nu...
  • baidu_30809315
  • baidu_30809315
  • 2017年12月25日 08:40
  • 28

Web前端面试指导(三十):JavaScript有几种类型的值?你能画一下他们的内存图吗?

题目点评 数据类型是所有程序都会涉及到的,是计算机语言比较基础知识,这种问题被问到的可能性其实并不大,这样的题目只要花点时间把它记下来就好了,难易程度一般。  两大类: 栈:原始数据类型(Und...
  • lxcao
  • lxcao
  • 2016年10月07日 14:37
  • 3248

js中typeof的返回值类型有哪些

js中typeof的返回值类型有哪些
  • GreyBearChao
  • GreyBearChao
  • 2017年09月09日 12:18
  • 1276

在javascript中,哪些值能作为if的条件呢

在javascript中,哪些值能作为if的条件呢 1、布尔变量true/false 2、数字非0,非NaN        (0 或NaN) 见下面的例子,莫以为负数就以为if语句为假了。 var...
  • zh521zh
  • zh521zh
  • 2015年07月13日 11:13
  • 1198

JavaScript的类型、值与变量

数据类型分为两类:原始类型、对象类型。其中,原始类型包含数字、字符串、布尔值、null、undefined。对象是除了原始类型之外的所有。 对象是属性的集合,每个属性都由“键/值对”构成。数字 不区...
  • surprise_7458
  • surprise_7458
  • 2017年03月29日 23:31
  • 142

JavaScript的对象转为原始值

对象到字符串(object-to-string)和对象到数字(object-to-number)的转换是通过调用待转换对象的一个方法来完成的。 所有的对象都继承了两个转换的方法。第一个是toStri...
  • QZXSY1
  • QZXSY1
  • 2016年04月18日 15:57
  • 627

javascript中12种DOM节点类型概述

javascript中12种DOM节点类型概述
  • qingqingzijinxin
  • qingqingzijinxin
  • 2016年08月18日 20:42
  • 692

javascript数字类型(Number)不精确问题

JavaScript中所有的数字,无论是整数还是小数,其类型均为Number。在程序内部,Number类型的实质是一个64位的浮点数,这与Java中double类型的浮点数是一致的;因此,JavaSc...
  • suo082407128
  • suo082407128
  • 2016年11月23日 11:21
  • 613

javascript语言两种变量类型及存储方式

js基础知识
  • qq_24892029
  • qq_24892029
  • 2016年04月24日 00:08
  • 1099

JavaScript类型&值&变量

JavaScript类型&值&变量
  • byrantch
  • byrantch
  • 2016年05月08日 11:25
  • 944
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javascript的值与类型
举报原因:
原因补充:

(最多只允许输入30个字)