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基础】基础数据类型变量为啥有属性?的更多相关文章

  1. JS 取Json数据中对象特定属性值

    解析JSON JSON 数据 var str = '[{"a": "1","b": "2"}, {"a&quo ...

  2. Js基础知识2-对象、对象属性全解

    Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...

  3. 贰、js的基础(一)

    1.js的语法 a.区分大小写 b.弱类型变量:变量无特定类型 c.每行结尾的分号可有可无 d.括号用于代码块 e.注释的方法与c语言和java相同 2.变量 注意事项: a.通过关键字var来声明. ...

  4. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  5. css+js+html基础知识总结

    css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...

  6. JavaScript--我发现,原来你是这样的JS(基础概念--灵魂篇,一起来学js吧)

    介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第三篇(灵魂篇介绍),有着剩下的第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的,要看懂 ...

  7. Vue.JS学习基础

      = 导航   顶部 vue.js介绍 vue.js实例 模板语法 计算属性 样式绑定 条件渲染 列表渲染 事件处理器 表单控件绑定 组件   顶部 vue.js介绍 vue.js实例 模板语法 计 ...

  8. Vue.js应用基础

    声明 这篇博文是我的Vue学习记录,其中参杂了不少我个人的理解,由于我并没有继续学习Vue的源码,所以不能保证这些理解都是正确的.如果这篇博文有幸被你读到,请带着批判的心情去审视它. 如果你发现了其中 ...

  9. 二、js中基础知识

    该篇文章主要是强化一下自己javaScript的基础,让写代码变得更轻松些.基础好的请忽略.    JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解 ...

随机推荐

  1. flume的配置详解

    Flume:===================== Flume是一种分布式的.可靠的.可用的服务,可以有效地收集.聚合和移动大量的日志数据. 它有一个基于流数据的简单而灵活的体系结构. 它具有健壮 ...

  2. [gym102220I]Temperature Survey

    (为了方便,以下记$a_{0}=0,a_{n+1}=n$​​,并将$n$​​加上1) 构造一个$n$行的网格图,从上到下第$i$行有$a_{i}$个格子,格子左对齐 记第$i$行第$j$个格子为$(i ...

  3. CODING 项目协同 2.0 —— 让协作有条不紊

    本文为 CODING 高级产品经理王海明 在腾讯云 CIF 工程效能峰会上所做的分享.文末可前往峰会官网,观看回放并下载 PPT. 大家好,我是 CODING 高级产品经理王海明,今天与大家分享的是项 ...

  4. 浅讲.Net 6之ConfigurationManager

    介绍 本节为大家带来.NET 6新增的ConfigurationManager,很多人好奇为啥要讲这个,读取加载配置信息都随手就来了,我们往下看一下. 翻译:这添加了 ASP.NET Core 的新 ...

  5. .NET 开源免费图表组件库,Winform,WPF 通用

    大家好, 我是等天黑, 今天给大家介绍一个功能完善, 性能强悍的图表组件库 ScottPlot, 当我第一次在 github 上看到这个库, 我看不懂,但我大受震撼, 这么好的项目当然要分享出来了. ...

  6. idea给类增加注释

    File-->Settings-->Editor-->File and Code Templates 找到class #if (${PACKAGE_NAME} && ...

  7. 6.K8s集群升级、etcd备份和恢复、资源对象及其yaml文件使用总结、常用维护命令

    1.K8s集群升级 集群升级有一定的风险,需充分测试验证后实施 集群升级需要停止服务,可以采用逐个节点滚动升级的方式 1.1 准备新版本二进制文件 查看现在的版本 root@k8-master1:~# ...

  8. SpringBoot引入第三方jar的Bean的三种方式

    在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便. 因此本篇博文也不再介绍Spring中通过xml来声明bean的使用方式. 一.注解 ...

  9. “微信小程序从分享卡片进入,第一次获取不到用户uid、第二次能获取到用户uid”解决方法

    用uniapp开发微信小程序时,有一个需求是分享罐表详情页面给其它用户,其它用户(在已经登录的状态下)点击分享卡片可以直接跳转到该罐表详情页,且能显示自己是否已经收藏该罐表(收藏状态由用户uid和罐表 ...

  10. CF840D Destiny

    题目传送门. 题意简述:多次询问求出一个区间最小的出现次数严格大于 \(\frac{r-l+1}{k}\ (2\leq k\leq 5)\) 的最小的数.无解输出 \(-1\). 注意到这个 \(k\ ...