******在chrome console中运行{a:1}.valueOf(); 报错:"SyntaxError: Unexpected token . ",这是由于{}被js引擎解析为代码块,它是没有valueOf方法。

一、valueOf()

基本数据类型是否拥有自己原型的valueOf方法。

1. Undefined:无

2. Null:无

3. Number:有 Number.prototype.valueOf

4. String:有 String.prototype.valueOf

5. Boolean:有 Boolean.prototype.valueOf

引用类型是否拥有自己原型的valueOf方法。

1. Object:对象实例都拥有valueOf方法,返回对象自身。

2. Array:无,调用valueOf方法时,返回的也是对象自身。

3. Function:无,调用valueOf方法时,返回的也是

示例如下:

undefined.valueOf(); //报错

null.valueOf(); //报错

var num = 123; num.valueOf(); //123  (若直接使用123.valueOf();会报错:"SyntaxError: Unexpected token ILLEGAL " Why??? who can explain it?)

"hello".valueOf(); //"hello"

true.valueOf(); //true

var o = {a:1}; o.valueOf(); //Object {a: 1} (若直接使用{a:1}.valueOf(); 报错:"SyntaxError: Unexpected token . ",这是由于{}被js引擎解析为代码块,它是没有valueOf方法。)

var obj = {name:"ting"}; var p = obj.valueOf(); p.name = "change"; console.log(p.name);  //change(说明返回对象自身)

[1,2,3].valueOf(); //[1,2,3]

var arr = [1,2,3];  var linkArr = arr.valueOf(); linkArr[0] = "ting"; console.log(linkArr); //["ting", 2, 3](说明返回数组本身)

function f() { console.log("f"); } f.valueOf(); //function f() { console.log("f"); }

var foo = function() {}; var linkFoo = foo.valueOf(); linkFoo.test = "ting"; console.log(linkFoo.test); //ting (说明返回函数本身)

二、toString()

数值、字符串、布尔值、对象都拥有toString方法,null和undefined没有该方法。

示例如下:

var num = 123; num.toString(); //"123"

"hello".toString(); //"hello"

false.toString(); //"false"

var o = {a:1}; o.toString(); //"[Object Object]"

null.toString(); //报错:"TypeError: Cannot read property 'toString' of null" (可使用强制转换函数String(),String(null); //"null" )

undefined.toString(); //报错 "TypeError: Cannot read property 'toString' of undefined" (可使用强制转换函数String(),String(undefined); //"undefined" )

三、typeof

typeof检测变量的类型,可以返回的类型有6种,分别示例如下:

typeof 123; //"number"

typeof "hello"; //"string"

typeof true; //"boolean"

typeof undefined; //"undefined"

typeof null; //"Object"

typeof [1,2,3]; //"Object"

typeof function(){}; //"function"

typeof Number; typeof String; typeof Boolean; typeof Array; typeof Function; //都返回"function"

function Person(name) { this.name = name; } var person1 = new Person("sun_mile_rain"); typeof person1; //"Object"

无论引用什么类型的对象,typeof操作符返回的都是"object",而instanceof操作符可以检测对象的确定类型,如“四、instanceof”中的例子所示。

四、instanceof

instantceof操作符可以确定对象的具体类型,而非笼统的"object",示例如下:

function Person(name) { this.name = name; } var person1 = new Person("sun_mile_rain");  person1 instanceof Person; //true

function Person(name) { this.name = name; } var person1 = new Person("sun_mile_rain");  person1 instanceof Object; //true

valueOf() toString() typeof instanceof的更多相关文章

  1. 【JavaScript中typeof、toString、instanceof、constructor与in】

    JavaScript中typeof.toString.instanceof.constructor与in JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行 ...

  2. typeof 、Object.prototype.toString和 instanceof

    数据类型 js 基本类型包括:Undefined  symbol null string boolean number js 引用类型包括:object array Date RegExp typeo ...

  3. valueof toString

    valueof toString add(1)(2) // 3 add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15 function add() { var ...

  4. 小tip:关于typeof,instanceof,toString(),valueOf(),toLocaleString(),join(),reverse(),sort(),pop(),push(),shift(),unshift()

    typeof:用于检测一个变量是否是基本数据类型.instanceof用于检测某引用对象是什么类型的对象. var s = "Nicho"; var b = true; var n ...

  5. JavaScript中typeof、toString、instanceof、constructor与in

    JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据. 最新的 ECMAScrip ...

  6. typeof + instanceof+toString+constructor什么推理javascript数据类型

    一个.typeof JS这些变量是弱类型(这是弱类型)的,它可以不管用来存储数据的类型的. typeof 数据类型可用于检测给定的变量.可能的返回值: 1. 'undefined' --- 这个值没有 ...

  7. JavaScript的三种类型检测typeof , instanceof , toString比较

    1.typeof typeof是js的一个操作符,在类型检测中,几乎没有任何用处. typeof 返回一个表达式的数据类型的字符串,返回结果为javascript中的基本数据类型,包括:number. ...

  8. javascript篇-typeof,instanceof,constructor,toString判断数据类型的用法和区别

    javascript基本数据类型有:string,number,Boolean,undefined,null 引用类型(复杂类型):object, ES6中新增了一种数据类型:Symbol 以上数据类 ...

  9. 类型判断----小白讲解typeof,instanceof,Object.prototype.toString.call()

    1.typeof只能判断基本类型数据, 例子: typeof 1 // "number" typeof '1' // "string" typeof true ...

随机推荐

  1. 生产者-消费者问题【Java实现】

     生产者-消费者问题是经典的并发问题, 非常适合并发入门的编程练习.  生产者-消费者问题是指, 有若干个生产者和若干个消费者并发地读写一个或多个共享存储空间:生产者创建对象并放入到共享存储空间,消费 ...

  2. [转]MySQL5.6新特性之Multi-Range Read

    这几天看到mrr的东西,刚好看到以前我们组的一个小伙的博客,我看挺全的,就转过来了,原博客地址请戳 一 介绍    MySQL 5.6版本提供了很多性能优化的特性,其中之一就是 Multi-Range ...

  3. #if、#ifdef、#if defined之间的区别【转】

    转自:http://quanminchaoren.iteye.com/blog/1870977 #if的使用说明 #if的后面接的是表达式 #if (MAX==10)||(MAX==20) code. ...

  4. 05-IP核应用之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯顿队长精心奉献   实验目的:了解FPGA的IP核相关知识并以计数器IP核为例学会基本IP使用的流程 实验平台:无 实验原理:     IP核(Intellectual Propert ...

  5. 利用angular与后台的交互

    记录的世界是强大的,不管天南海北还是五湖四海,如果利用angular js与后台的交互.angular js 在api上称为是http服务: 下面咱给一个简单的代码看看:简单的利用后台与前端的tab切 ...

  6. 使用HttpClient发送数据 到WebApi

    发送和JSON数据 /=============================webAPI接受POST的JOSN数据=============================/ POST api/& ...

  7. HTML 事件属性(下)

    HTML 事件属性(下) 一:键盘事件 (Keyboard Events)二:鼠标事件 (Mouse Events) 一:键盘事件 (Keyboard Events)在下列元素中无效:base.bdo ...

  8. Rmarkdown用法与R语言动态报告

    Rmarkdown用法与R语言动态报告数据分析用R语言非常便捷,因为R语言的社区强大,并且在不断更新和完善,提供了各种分析利器.Knitr和Rmarkdown包则是数据分析中的动态报告利器. 下面是一 ...

  9. 获取ip

    需要引用System.Web http://stackoverflow.com/questions/4879837/smart-way-to-get-the-public-internet-ip-ad ...

  10. socket(一)

    相关链接: http://my.oschina.net/u/1378445/blog/340206?p=2&temp=1469158886336#blog-comments-list http ...