valueOf() toString() typeof instanceof
******在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的更多相关文章
- 【JavaScript中typeof、toString、instanceof、constructor与in】
JavaScript中typeof.toString.instanceof.constructor与in JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行 ...
- typeof 、Object.prototype.toString和 instanceof
数据类型 js 基本类型包括:Undefined symbol null string boolean number js 引用类型包括:object array Date RegExp typeo ...
- valueof toString
valueof toString add(1)(2) // 3 add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15 function add() { var ...
- 小tip:关于typeof,instanceof,toString(),valueOf(),toLocaleString(),join(),reverse(),sort(),pop(),push(),shift(),unshift()
typeof:用于检测一个变量是否是基本数据类型.instanceof用于检测某引用对象是什么类型的对象. var s = "Nicho"; var b = true; var n ...
- JavaScript中typeof、toString、instanceof、constructor与in
JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据. 最新的 ECMAScrip ...
- typeof + instanceof+toString+constructor什么推理javascript数据类型
一个.typeof JS这些变量是弱类型(这是弱类型)的,它可以不管用来存储数据的类型的. typeof 数据类型可用于检测给定的变量.可能的返回值: 1. 'undefined' --- 这个值没有 ...
- JavaScript的三种类型检测typeof , instanceof , toString比较
1.typeof typeof是js的一个操作符,在类型检测中,几乎没有任何用处. typeof 返回一个表达式的数据类型的字符串,返回结果为javascript中的基本数据类型,包括:number. ...
- javascript篇-typeof,instanceof,constructor,toString判断数据类型的用法和区别
javascript基本数据类型有:string,number,Boolean,undefined,null 引用类型(复杂类型):object, ES6中新增了一种数据类型:Symbol 以上数据类 ...
- 类型判断----小白讲解typeof,instanceof,Object.prototype.toString.call()
1.typeof只能判断基本类型数据, 例子: typeof 1 // "number" typeof '1' // "string" typeof true ...
随机推荐
- 【final】站立会议---11.28
名称:nice! 组长:李权 成员:韩媛媛 刘芳芳 宫丽君 于淼 项目名称:约跑app 时间:11月28日 12:30 内容: 新任务的分配 1.李权分配任务 2.韩媛媛写站立会议 3.刘芳芳修改BU ...
- 机器学习实战-边学边读python代码(3)
程序清单2-3 归一化特征值: def autoNorm(dataSet): /* >>> barray([[ 1., 2., 3.], [ 2., 3., 4.], [ 10., ...
- HTTP中Get与Post的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认 为:一个URL地址,它用于描述一个网络上的资源,而HTT ...
- 实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff。
(1)Person类中的属性有:姓名name(String类型),地址address(String类型), 电话号码telphone(String类型)和电子邮件地址email(String类型): ...
- Java 新手学习 CSS样式列表 排版 格式布局
1,样式表分为 内联样式表 内嵌样式表 外部样式表 三种. 内联样式表是直接写在标签里面的 比如 <p style=“”></p> <div style=& ...
- if,else语句的运用
1.求解一元二次方程 Console.WriteLine("求解一元二次方程:a*x*x+b*x+c=0"); Console.Write("请输入 a="); ...
- MVC 强类型ViewData[] TempData[]
一.ViewData[] //赋值 ViewData["u"]="值"; //取值 数据类型 u= ViewData["u"] as 数据类 ...
- 【转载】详解CreateProcess调用内核创建进程的过程
原文:详解CreateProcess调用内核创建进程的过程 昨天同学接到了腾讯的电面,有一题问到了CreateProcess创建进程的具体实现过程,他答得不怎么好吧应该是, 为了以防万一,也为了深入学 ...
- 什么是 Help Desk?
科技如何帮助公司发展,关键就在于保证IT系统的安全稳定运行.我们都知道要保证系统100%可用非常难实现,那么如何在系统故障时减少处置时间?一个有效的办法就是帮助台(Help Desk).那么什么是帮助 ...
- 《BI项目笔记》多维数据集中度量值设计时的聚合函数
Microsoft SQL Server Analysis Services 提供了几种函数,用来针对包含在度量值组中的维度聚合度量值.默认情况下,度量值按每个维度进行求和.但是,通过 Aggrega ...