• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > js toString()和valueOf()

js toString()和valueOf()

作者:xiaowei的博客 字体:[增加 减小] 来源:互联网 时间:2017-08-26

xiaowei的博客通过本文主要向大家介绍了valueof和tostring,js tostring,js tostring方法,js tostring的用法,js tostring 16等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

toString(): 将该对象的原始值以字符串形式返回。

 

这两个方法一般是交由JS去隐式调用,以满足不同的运算情况。
在数值运算里,会优先调用valueOf(),如a - b;
在字符串运算里,会优先调用toString(),如alert(c)。

1、 在JavaScript中,只有少数情况下,错误类型才会导致出错,比如调用非函数,或者读取null或者undefined的属性时:

"hello"(1); // error: not a function
null.x; // error: cannot read property 'x' of null

2、比如-, *, /,和%等算术运算符都会把操作数转换成数字的,但是“+”号就有点不一样了,有些情况下,它是算术加号,有些情况下,是字符串连接符号,具体的要看它的操作数:

2 + 3; // 5
"hello" + " world"; // "hello world"

3、字符串和数字相加,结果是字符串。JavaScript会自动把数字转换成字符的,不管数字在前还是字符串在前:

"2" + 3; // "23"
2 + "3"; // "23"
1+ "2" +3 //"123"

4、null会转换成0,undefined会转换成NaN。需要注意的是,NaN和NaN是不相等的(这是由于浮点数的精度决定的)

5、JavaScript提供了isNaN来检测某个值是否为NaN,但是,这也不太精确的,因为,在调用isNaN函数之前,本身就存在了一个隐式转换的过程,它会把那些原本不是NaN的值转换成NaN的。

isNaN("foo"); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN({ valueOf: "foo" }); // true

6、只有NaN是自己不等自己的,使用不等于号(!==)来判断一个数是否等于自身,检测到NaN

var a = NaN;
a !== a; // true
var b = "foo";
b !== b; // false
var c = undefined;
c !== c; // false
var d = {};
d !== d; // false
var e = { valueOf: "foo" };
e !== e; // false
function isReallyNaN(x) {
    return x !== x;
}

7、一个对象同时存在valueOf方法和toString方法.

所有对象继承了两个转换方法:
第一个是toString(),它的作用是返回一个反映这个对象的字符串
第二个是valueOf(),它的作用是返回它相应的原始值.

一般来说,对象到字符串的转换经过了如下步骤:

1.如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值,js将这个值转换成字符串,并返还这个字符串结果。

2.如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么js将调用valueOf()方法。

3.否则,js无法从toString()或者valueOf()获得一个原始值,因此这时它将抛出一个类型错误异常。

一般来说,对象到数字的转换过程中,js做了同样类似的事情,但这里它会首先尝试使用valueOf()方法:

1.如果对象具有valueOf()方法,后者返回一个原始值,则js将这个原始值转换成数字,并返回这个数字。

2.否则,如果对象具有toString()方法,后者返回一个原始值,则js将转换并返回。

(首先js转换成相应的字符串原始值,再继续将这个原始值转换成相应的数字类型,再返回数字)

3.否则,js抛出一个类型错误异常。

对象通过toString或valueOf方法转换为原始值,JS语言核心的内置类首先尝试使用valueOf(),再尝试使用toString()

对于所有非日期对象来说,对象到原始值的转换基本上是对象到数字的转换

(首先调用valueOf,但日期对象则使用对象到字符串的转换模式,但这种转换只执行一次就立即被使用,不会像上面所说的那般 先转成字符串再转成相应的数字类型)

比如说,js中“+”运算符可以进行数学加法和字符串连接操作。

其中一个操作数是对象,则js将使用特殊的方法(valueOf)将对象转换成原始值,而不是使用其他算术运算符的方法执行对象到数字的转换。

”==“运算符,“<”与其他运算符也会做对象到原始值的转换,但要出去日期对象的特殊情形。

“-“减号运算符把两个操作数都转换成数字.

对于日期类型:
toString()返回Sat Apr 04 2015 13:21:08 GMT+0800形式
valueOf() 返回毫秒数

var now = new Date();
console.log(now);  // Date {Sat Apr 04 2015 13:21:08 GMT+0800}
console.log((now-1));  // 1428124868474
var now = new Date();
console.log(now);  // Date {Sat Apr 04 2015 13:21:08 GMT+0800}
console.log(typeof (now+1));  //string
console.log((now+1));  //Sat Apr 04 2015 13:21:08 GMT+08001
console.log(typeof (now-1));  //number
console.log((now-1));  // 1428124868474
console.log(now == now.toString());  //true
console.log(now > now -1); //true

https://www.zhihu.com/question/24262399/answer/27215444

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入理解Javascript中的valueOf与toString
  • js toString()和valueOf()

相关文章

  • 2017-05-11实例分析nodejs模块xml2js解析xml过程中遇到的坑
  • 2017-05-11利用node.js搭建简单web服务器的方法教程
  • 2017-05-11echarts3 使用总结(绘制各种图表,地图)
  • 2017-05-11vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
  • 2017-05-11jquery 正整数数字校验正则表达式
  • 2017-05-11微信小程序开发入门基础教程
  • 2017-05-11vue组件实例解析
  • 2017-05-11bootstrap中添加额外的图标实例代码
  • 2017-05-11JS实现线性表的链式表示方法示例【经典数据结构】
  • 2017-05-11js仿小米手机上下滑动效果

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • JS对象创建的几种方式整理
    • node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
    • js 递归和定时器的实例解析
    • jquery PrintArea 实现票据的套打功能(代码)
    • JavaScript实现两个select下拉框选项左移右移
    • 基于jQuery实现文字打印动态效果
    • bootstrap datetimepicker实现秒钟选择下拉框
    • JavaScript用JSONP跨域请求数据实例详解
    • Javascript中类式继承和原型式继承的实现方法和区别之处
    • node.js实现复制文本到剪切板的功能

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有