对象转换为原始值的实现方法


Posted in Javascript onJune 06, 2016

首先,我们要明白原始值得概念

原始值

存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。

引用值

存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处

————引用了w3c里的概念

原始值,简单点理解就是 null  undefined string number Boolean 这些

对象转换为boolean相对简单

所有的对象(包括数组和函数)都转换成true,包装对象从也是对象,也转换为true

书上是这么说的  “存取字符串,数字和布尔值的属性时创建的临时对象称之为包装对象”,我是这么理解的,new出来的string啊,number啊,boolean啊都算作包装对象,他有别于对象,但它确实是个对象,最主要的区别就是不能给包装对象定义新的属性,因为string number Boolean的属性是只读的。

对象转换为string类型

如果 对象具有toString()方法,就调用toString()的方法,如果返回一个原始值,就把这个原始值转换成字符串,对象就转换成这个字符串,如果不具有toString()方法或者这个方法返回的值不是一个原始值,那么就调用valueOf()方法,同样的套路,如果返回的是一个原始值,就把这个原始值转换成字符串,那么对象也就转换成了这个字符串了,如果返回的不是一个原始值,就抛出一个类型转换的错误。

这里的toString()方法和valueOf()方法就不一一赘述了,

对象转换为number类型

相比较转换成string,转换number的过程,正好的与其相反,先调用valueOf()方法,再调用toString()方法,最后toString()方法返回的不是一个原始值是,js就抛出一个错误。

当使用"=="和"+"运算符进行数字的计算或者字符串的拼接时,如果运算符的一侧是对象,将使用特殊的对象转换为原始值的方法。对于非日期对象,对象转换成原始值就是

对象先调用valueOf()方法,再调用tostring()方法,并将通过调用这两个方法得到的原始值直接作为对象转换成的原始值,对于日期对象来说,先调用toString()方法,再调用valueOf方法。

对于日期对象转换成原始值,举个例子吧

 

var now=new Date(); 
typeOf(now+1);     //"string" 将日期对象转换成了字符串,因为先调用的是toString()方法 
typeOf(now-1);      //"number" 体现了js的灵活性,"-"将字符串转换线成了number

以上这篇对象转换为原始值的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
传智播客学习之JavaScript基础篇
Nov 13 Javascript
jQuery 技巧小结
Apr 02 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
Apr 01 Javascript
javascript实现俄罗斯方块游戏的思路和方法
Apr 27 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
Apr 30 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
Oct 30 Javascript
jquery实现简单的全选和反选功能
Jan 02 Javascript
浅谈javascript 函数表达式和函数声明的区别
Jan 05 Javascript
jQuery自定义数值抽奖活动代码
Jun 11 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
Mar 17 Javascript
利用原生JS实现欢乐水果机小游戏
Apr 23 Javascript
vue-amap根据地址回显地图并mark的操作
Nov 03 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
Jun 06 #Javascript
node-http-proxy修改响应结果实例代码
Jun 06 #Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 #Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 #Javascript
jquery插件方式实现table查询功能的简单实例
Jun 06 #Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
Jun 06 #Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
Jun 06 #Javascript
You might like
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
Python中__new__与__init__方法的区别详解
2015/05/04 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
孩子教育的心得体会
2014/09/01 职场文书
财务工作检讨书
2014/10/29 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
html实现弹窗的实例
2021/06/09 HTML / CSS
Python pyecharts绘制条形图详解
2022/04/02 Python