js基础知识:变量
一、什么是变量?
在JavaScript中,变量用来存放值的,存放任何数据类型的值都可以,它就是值的容器。
二、变量怎么用?
(一)用var声明1个变量
在使用变量之前,需要var关键字来声明变量,变量的名字要有意义。比如:
(等号“=”就是赋值运算符,它的作用是把右侧的值 赋给 左侧的变量、对象属性、数组元素)
我们声明1个变量num,在变量num中存放(通过赋值来实现)1个原始类型的数据:
var num = 5; console.log(num); //
我们还可以让变量存放对象类型的数据:
var obj= {x:1,y:2}; console.log(obj); // Object {x: 1, y: 2}
通常都是用var一次性初始化多个变量,省的老写“v-a-r”这3个字母了:
var num = 1, str = 'string', bol = false;
(二)变量的名字变量的名字有2点需要注意:
1.以字母、$(美元符号)、_(下划线)开头
2.区分大小写
三、变量中能存放些什么东西?
在变量中可以存放任意JS支持的数据,也就是 “原始类型”的数据 与 “对象类型”的数据 。
(一)JS中的数据类型
我们先来温习一下JS中的数据类型吧,大家都知道JS中的数据类型分为:“原始类型”和“对象类型”2种。
“原始类型”的数据有:数字(5)、字符串('hello')、布尔值(true/false)、null(特殊的原始值)、undefined(特殊的原始值)。
“对象类型”的数据有:数组([1,2,'welcome',false,{x:1,t:2}])、函数(function foo(){return '我是函数';})、对象({name:'ghettoboy',age:27})。
(二)在变量中存放“原始类型”数据 与 “对象类型”数据的差异
1.存放着实际的值——“原始类型”的数据
如果一个变量保存的是“原始类型”的值,那么变量保存的就是某个原始数据类型的值。比如下面你所看到的,变量a里面保存着数字5、变量str中存放着字符串'String'、变量bol放的是布尔值true,变量里保存的是实际的值。
var num = 5, str = 'String', bol = true, noVal = undefined, emptyObj = null;
2.存放的是内存地址——“对象类型”的数据
如果变量保存的是“对象类型”的数据,那么变量保存的就是1个内存地址,这个内存地址对应着1个“对象类型”的值。只要通过地址找到了,那么我们就可以操作它。
var obj = {x:1,y:2}, arr = ['你','hao','吗?'];
function foo(){
alert('静静的思考');
}
变量obj保存的1个内存地址,通过这个地址可以找到对象{x:1,y:2}、变量arr保存的是通向数组['你','hao','吗?']的地址,同样函数声明foo(foo和变量的作用一样)保存着找到这个函数的地址。
(三)把1个变量 赋值给 另1个变量
好,现在我们有两个变量,a,b。
当我们想把变量b 赋值给 变量a时,a得到的是“值” 还是 “内存地址”,就看变量b中存放着的是什么数据类型的值了。
a = b; // a会得到什么?这取决于b中存放的是什么数据类型的值
1.如果,变量b中存放着“原始类型”的值。
变量b中存放着“原始类型”的值,此时b保存的是1个值。a=b,那么首先复制出1份变量b所保存的值,然后将这个刚刚复制出来的值 赋给 变量a。
注意:此时变量b中还是存着自己的值,赋给变量a的那个值,是复制出来的值。
var a, b=10;
a = b; // 先复制一份b的值,也就是10,然后把这个刚复制出来的10放到变量a里面。
console.log(a); //
console.log(b); // 10
// 现在,变量a 与 变量b 都保存着10。我们说过变量只是个容器,2个不同的容器,你放什么,我放什么,互不干扰。
a = '来点新鲜的';
console.log(a); // '来点新鲜的'
console.log(b); // 变量b还是存着自己的10
2.如果,变量b中存放着是“对象类型”的值。
变量b中存放着“对象类型”的值,此时b保存的是1个内存地址,通过这个内存地址可以找到1个对象。a=b,那么也是先复制1份变量b保存的内存地址,然后将这个刚刚复制出的内存地址 赋值给 变量a。
现在,变量a、变量b都有同一个对象的内存地址。这意味着,通过任意1个变量对这个对象作出修改,都会在另1个变量中表现出来。
var a,b = [1,2,3];
a = b; // 现在变量a中保存着1个内存地址,这地址通向[1,2,3]
a[0] = '通过变量a来修改一下';
console.log(b); //["通过变量a来修改一下", 2, 3]
console.log(a); //["通过变量a来修改一下", 2, 3]
参考资料:
1.《JavaScript高级程序设计》(第3版) 4.1基本类型和引用类型的值
2.《JavaScript权威指南》(第5版) 4.4基本类型和引用类型
js基础知识:变量的更多相关文章
- js基础知识--变量类型和变量计算
提问: JS中使用typeof能得到的哪些类型 何时使用===何时使用== JS中有哪些内置函数 JS变量按照存储方式区分为哪些类型,并描述其特点 如何理解JSON 涉及知识点:(1)变量类型 值类型 ...
- JS基础知识——变量类型和计算(一)
JS中使用typeof能得到的哪些类型? 何时使用===何时使用==? JS中有哪些内置函数? JS变量按照存储方式区分为哪些类型,描述其特点? 如何理解JSON? 知识点梳理 一.变量类型: (1) ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- [JS复习] JS 基础知识
项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display :inline or bloc ...
- HTML+CSS+JS基础知识
HTML+CSS+JS基础知识 目录 对HTML+CSS+JS的理解 基础知识 对HTML+CSS+JS的理解 基础知识 插入样式表的三种方式 外部样式表:<link rel="sty ...
- Node.js基础知识
Node.js入门 Node.js Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...
- 网站开发进阶(十五)JS基础知识充电站
JS基础知识充电站 1.javascript alert弹出对话框时确定和取消两个按钮返回值? 用的不是alert对话框,是confirm confirm(str); 参数str:你要说的话或问题: ...
- JS基础知识笔记
2020-04-15 JS基础知识笔记 // new Boolean()传入的值与if判断一样 var test=new Boolean(); console.log(test); // false ...
- Js基础知识(一) - 变量
js基础 - 变量 *大家对js一定不会陌生,入门很简单(普通入门),很多人通过网络资源.书籍.课堂等很多途径学习js,但是有些js基础的只是往往被大家遗漏,本章就从js变量类型来说一说js 变量类型 ...
- js基础知识温习:Javascript中如何模拟私有方法
本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...
随机推荐
- 使用HttpClient 发送get、post请求,及其解析xml返回数据
一.关于HttpClient的使用: 可以参考这个博客地址,这里有详细的介绍,需要的可以先看一下: 地址是:http://blog.csdn.net/wangpeng047/article/detai ...
- html+css 技巧
3.css定义的技巧:[1].为了将来的css代码优化,建议所有的属性上要带上“:” [2].某些html 标签,有自己默认的css属性值, 例如h1 标签就有自己的属性值,自动就是加粗显 ...
- 使用dom元素和jquery元素实现简单增删改的练习
软件开发实际就是数据的增删改查,javascript前端开发也不例外.今天学了jquery框架的简单使用.于是用它实现简单的增删改,接着也用原始的javascript实现同样的功能,以便看出jquer ...
- 构造 & 析构 & 匿名对象
以前仅知道创建对象,但对匿名对象的了解基本为0. 通过阅读google chromium源代码 中关于 log 的使用,查阅相关资料,了解了一下匿名对象,予以记录. 什么是匿名对象 匿名对象可以理 ...
- How to configure a static IP address on CentOS 7(CentOS7静态IP地址设置)
Question: On CentOS 7, I want to switch from DHCP to static IP address configuration with one of my ...
- linux driver编译环境搭建和命令
首先将ubuntu14.04的内核升级到内核3.18.12. 其次,Ubuntu14.04上驱动编译命令 $ sudo make -C ~/linux-3.18.12/ M=`pwd` modules ...
- 向modesim中添加alter库 (或者在每次仿真时将库文件加入仿真文件夹一起编译)
在ModelSim中进行仿真需要加入Quartus提供的仿真库,原因是下面三个方面: ·Quartus不支持Testbench: ·调用了megafunction或者lpm库之类的Alte ...
- 在Xcode中使用Git进行源码版本控制
http://www.cocoachina.com/ios/20140524/8536.html 资讯 论坛 代码 工具 招聘 CVP 外快 博客new 登录| 注册 iOS开发 Swift Ap ...
- DOCTYPE的详细图解
之前有一次写代码的时候忘记写了<!DOCTYPE html> 导致样式的效果一直有点问题,查了很久才发现时候这个的锅.之后自己详细的来查找了DOCTYPE的作用. 在目前,基本上都是采用浏 ...
- OSG配置问题
BUILD_OSG_ARAPPERS: 这一项要选,不然后面编译自己的测试程序的时候,会报无法打开文件"osgIntrospectiond.lib"错误. Could not fi ...