【js基础】基础数据类型变量为啥有属性?
1.变量和数值
let a =1
这是一个简单的变量声明,其中“a”是变量,在代码中供程序员或者语法操作的,而1是数值,是我最终需要的东西。为什么不直接使用数值而使用变量?这个就不展开了。
2. 变量和数值是一个东西吗?
我们都知道引用数据类型不是
let b = {}
其中{}是数值,一个空对象,它是切切实实地存在堆里的。而b是这个数值对应的地址,我们可以在栈里面通过这个地址去找的堆里的值。
那基础数据类型呢?

可以发现,a和1明显也并不是一个东西。a有__proto__属性,而1没有。也就是说,1作为基础数据类型数据,没有属性很正常,因为它是基础数据类型。但是,a作为基础数据类型的变量,它已经是个对象了,所以它有属性。
3.临时对象
大多数基础数据类型变量都可以算是临时对象(null和undefined除外)
我们知道除了直接声明变量外,还可以用构造函数
let a =new Number(1)
需要使用取1这个数据的时候就可以用,valueOf()

我们对比一下直接声明和构造函数声明得到的变量
直接声明

构造函数

一模一样是吧。所以,直接声明的时候,其实a也是个对象。只不过它省略了.valueOf(),也就是说你可以直接通过a来拿到其中的值,不过同时你也可以给a赋予属性。
let a =1
a.b=2 //不报错
console.log(a.b)//undefined
可是赋值之后拿不到,为啥?
因为赋值的a和取值的a不是同一个东西.它实际上的步骤差不多是这样.
let aObj = new Number(1)
aObj.b =2
let a =aObj.valueOf()
console(a.b) //undefined
也就是说,当你给a取值的时候实际上就是valueOf(),不过可以省略,当时当你赋与属性或者获取属性的时候实际上是操作的aObj,而aObj通过点语法实际上并不会将数值绑定上去,也就是说,a.b语法上可以,但实际上并没有生效,所以a.b就是undefinde.
在日常写代码的过程中,我们以为我们操作的a就是1,实际上它是aObj对象,所以可以赋予额外属性(虽然没用),也继承了Number本身的一些属性.而这个aObj就是临时变量,用完就马上销毁了.并且整个被隐藏了.
总结:数据是数据,变量是变量.基础数据类型的变量(除null和undefined外),都是临时对象,所以变量也就有属性和方法了.
【js基础】基础数据类型变量为啥有属性?的更多相关文章
- JS 取Json数据中对象特定属性值
解析JSON JSON 数据 var str = '[{"a": "1","b": "2"}, {"a&quo ...
- Js基础知识2-对象、对象属性全解
Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...
- 贰、js的基础(一)
1.js的语法 a.区分大小写 b.弱类型变量:变量无特定类型 c.每行结尾的分号可有可无 d.括号用于代码块 e.注释的方法与c语言和java相同 2.变量 注意事项: a.通过关键字var来声明. ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
- css+js+html基础知识总结
css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...
- JavaScript--我发现,原来你是这样的JS(基础概念--灵魂篇,一起来学js吧)
介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第三篇(灵魂篇介绍),有着剩下的第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂 ...
- Vue.JS学习基础
= 导航 顶部 vue.js介绍 vue.js实例 模板语法 计算属性 样式绑定 条件渲染 列表渲染 事件处理器 表单控件绑定 组件 顶部 vue.js介绍 vue.js实例 模板语法 计 ...
- Vue.js应用基础
声明 这篇博文是我的Vue学习记录,其中参杂了不少我个人的理解,由于我并没有继续学习Vue的源码,所以不能保证这些理解都是正确的.如果这篇博文有幸被你读到,请带着批判的心情去审视它. 如果你发现了其中 ...
- 二、js中基础知识
该篇文章主要是强化一下自己javaScript的基础,让写代码变得更轻松些.基础好的请忽略. JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解 ...
随机推荐
- vue+node+mongondb实战之路由
看了一段时间vue的文档,一直没有机会来开发一个真正的vue项目,趁着这几天清闲,整合一下最新的技术,变学变练来开发一个vue的简单博客 有了开发博客的想法之后,谁知道第一步就被拦住了,看了vue的基 ...
- SpringCloud微服务实战——搭建企业级开发框架(十九):Gateway使用knife4j聚合微服务文档
本章介绍Spring Cloud Gateway网关如何集成knife4j,通过网关聚合所有的Swagger微服务文档 1.gitegg-gateway中引入knife4j依赖,如果没有后端代码编 ...
- [loj2978]杜老师
假设所有素数从小到大依次为$p_{1},p_{2},...,p_{k}$,我们将$x$转换为一个$k$位的二进制数,其中从低到高第$i$位为1当且仅当其$p_{i}$的幂次为奇数 不难发现以下两个性质 ...
- PIC18 bootloader之UART bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 应客户要求, 将PIC ...
- 24:WEB漏洞-文件上传之WAF绕过及安全修复
本课重点 案例1:上传数据包参数对应修改测试 案例2:safedog+云服务器+uploadlabs测试 案例3:safedog+云服务器+uploadlabs_fuzz测试 案例4:文件上传安全修复 ...
- vue项目中使用 SheetJS / js-xlsx 导出文件
1. npm install xlsx 2. 在App.vue 中引入xlsx import * as XLSX from 'xlsx'; // 数据导出导入所需要的依赖 3. 使用xlsx 3 ...
- bzoj4036 / P3175 [HAOI2015]按位或
bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...
- [R] cbind和filter函数的坑
最近我用cbind函数整合数据后,再用filter过滤数据,碰到了一个大坑. 以两组独立样本t检验筛选差异蛋白为例进行说明吧. pro2 <- df2[1:6] Pvalue<-c(rep ...
- mysql-select as
给查询对象起个别名. 把查询对像起个别名的作用. select ID as 用户ID,Name as 用户名 from Table_user
- eclipse不自动弹出提示的解决办法(eclipse alt+/快捷键失效)
转载:http://yuncode.net/article/a_53bf6888b6f5065 我的问题:在jsp中使用"alt+/"不能够自动导入java包.利用3,4解决问题 ...