今天我们说说数据类型转换的问题,js中有七种类型:

  • number
  • string
  • boolean
  • symbol
  • null
  • undefined
  • object

它们之间是如何进行类型转换的呢?

任意类型转字符串:

String(x)

也可以

toString()

也可以

x + ' '

任意类型转换数字

Number(x)

parseInt(x, 10)

第一位为参数,第二位可接转换进制,可不写,默认10进制。

parseFloat(x)

浮点数的转换

任意类型数字转换可简写成 x - 0

也可以写成 + x

任意类型转布尔值

Boolean(x)

!!x  双感叹号即可

需要记住:七个falsy值(即在boolaen上下文中指定可转换为false的值就叫falsy)

false  0   NaN    ' '  " "  null  undefined

内存图(解释内存如何存放js)

  1. 一个 8G的内存条
  2. 操作系统开机即占用 512MB
  3. Chrome 打开即占用 1G 内存
  4. Chrome 各每个网页分配一定数量的内存
  5. 这些内存要分给页面渲染器、网络模块、浏览器外壳和 JS 引擎(V8引擎)
  6. JS 引擎将内存分为代码区和数据区
  7. 我们只研究数据区
  8. 数据区分为 Stack(栈内存) 和 Heap(堆内存)
  9. 简单类型的数据直接存在 Stack 里
  10. 复杂类型的数据是把 Heap 地址存在 Stack 里

遇到引用类型或者基本类型内存存储的问题直接画图,将其变量声明存放的位置画在Stack、Heap中。不用动脑,画完即可得出结论。

基于Stack(栈内存)和Heap(堆内存),就引发出了一个问题?深拷贝与浅拷贝是什么鬼?

var a = 1
var b = a
b = 2 //这个时候改变 b
a 完全不受 b 的影响
那么我们就说这是一个深拷贝

对于简单类型的数据来说,赋值就是深拷贝。
对于复杂类型的数据(对象)来说,才要区分浅拷贝和深拷贝。

这是一个浅拷贝的例子

var a = {name: 'yang'}
var b = a
b.name = 'guo'
a.name === 'guo' // true

因为我们对 b 操作后,a 也变了

什么是深拷贝?就是对Heap堆内存进行的完全拷贝。

JavaScript中的数据转换相关推荐

  1. javascript中的异步调用,promise对象,async/await用法

    原生javascript中的的回调函数 即callback 就是通过回调函数来通知主程序 对于io 密集的非常好用:eg. file,DB读写,网络访问 异步: javascript就是个单线程语言, ...

  2. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  3. JavaScript中,this的绑定规则

    对于 JavaScript 新手来说,this 是非常基础同时也难以理解的知识点. 比如下面的代码,this 指向就有三种方式. 在<你不知道的 JavaScript>一书中,我总算比较清 ...

  4. Javascript中undefined,NaN等特殊比较

    以下内容转自: http://blog.csdn.net/hongweigg/article/details/38090093 1.问题:在Javascript中,typeof(undefined) ...

  5. Javascript中二进制数据处理方法

    Javascript中二进制数据处理方法 转载于:https://www.cnblogs.com/motadou/archive/2012/02/19/2358514.html

  6. JavaScript 中的有限状态机

    http://www.ibm.com/developerworks/cn/web/wa-finitemach/ JavaScript 中的有限状态机 Page navigation 系列文章 有限状态 ...

  7. 在Javascript中使用面向对象的编程

    by Mike Koss March 26th, 2003 这是一篇,我个人认为最好的,Javascript面向对象编程的文章.翻译不好的地方,还望大家指正,谢谢. 如果您需要,可以访问下面的地址取得 ...

  8. 取出url中的字符_如何在JavaScript中解析URL:例如主机名,路径名,查询,哈希?...

    统一资源定位符(缩写URL)是对Web资源(网页,图像,文件)的引用.URL指定资源位置和检索资源的机制(http,ftp,mailto). 例如,这是此博客文章的URL: 通常,您需要访问URL的特 ...

  9. 在javascript中判断类型

    String 一个字符串始终是一个字符串,所以这一块是很容易.除非使用new(new String)调用,否则typeof将返回"object".所以也要包含那些可以使用的字符串i ...

最新文章

  1. TensorFlow六种激活函数
  2. 【Linux 内核 内存管理】Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )
  3. 今天,神策数据官网银行 Demo 正式上线!
  4. STM32为何在诸多的单片机中脱颖而出?
  5. Ubuntu下用eclipse调试caffe code
  6. 载winpcap4.1.1_最常用的11个电缆载流量数据表,建议收藏备用
  7. 一个小小的总结--关于写博客这件事
  8. Java讲课笔记15:抽象类、接口和多态
  9. 分段路由_如何理解段路由(SPRING)?—Vecloud微云
  10. [2018.04.23 T1] 数学
  11. JAVA人脸识别(人脸对比)
  12. Nexus下载安装+登录修改密码(Maven私服)
  13. 刀与剑-C++ COM组件调用
  14. flash 独立播放器
  15. _stdcall相关
  16. antv/G6使用详细介绍,一篇文章说清antv G6如何使用
  17. 逆向知识之CS辅助/外挂专题.2.实现CS1.6无限夜视仪.无限闪光烟雾高爆弹.
  18. 汉语拼音文件搜索项目
  19. 分销商城APP开发制作方案
  20. mac 终端上运行NPM INSTALL时出现问题:npm error!cb() 从未调用过!解决了

热门文章

  1. cracer培训教程第一期 文件上传漏洞与命令注入漏洞
  2. office数据集dslr_如何检查DSLR的快门计数(以及为什么要关心)
  3. 速卖通上的支付方式无法满足买家的付款需求怎么办?
  4. 施耐德软起故障php,施耐德软启动器排除故障的具体措施和方法
  5. GaussDB 数据库实验环境搭建指导
  6. Oracle 培训笔记
  7. rustdesk 自建服务器配置 docker方案
  8. FT,DTFT,DFT,IDFT,FFT含义
  9. css特效1:流光背景?我不允许你还不会
  10. MiniHand蓝牙自动化仿生机械臂小车