js中变量包含两种不同数据类型的值,基本类型值(简单的数据段)和引用类型值(可能由多个值组成的对象)。那么他们在保存方式和复制变量值是上有什么不同呢?

一、保存

只能给引用类型的值动态添加属性,不能给基本类型添加属性,如果不小心加了,结果为undefied.

二、复制变量值

先看demo

//demo1
var a = 3;
var b = a;
b = 5;
console.log(a); //3
------------------------------------------------
//demo2
var obj1 = {
monney:1000
}
var obj2 = obj1;
var obj3 = obj1;
obj2.monney = 500;
console.log( obj1.monney); //500
console.log(obj2 == obj3);

why?

这样主要是js中两种数据类型不同的机制。

基本数据类型:num, string, boolean, null, undefined.

引用类型      :Array,  Function,  Object, RegExp,  Date,  Math,  Error,  Global 

so?

基本类型的赋值是按值访问的,就相当于复制了一个副本,之后互不相干,所以demo1中,a赋值给b之后,任你b怎么改变,与我何干?

引用类型就不一样了,它是按引用访问的。相当于把引用地址赋值给别人,或者说你把家钥匙给了别人,之后别人把你家电视搬走,那是不是别人的行为使你拥有的东西改变了?

从内存角度来看,一个对象的内容储蓄在"堆内存中",而该对象的地址(索引)存在栈内存中,把对象赋值给一个变量,相当于把对象的地址赋值给了一个变量,该变量可以去操作原对象,改变原有对象的内容。那同一个对象赋值给多个变量,多个变量之间肯定不会相等的,简单的讲,就是你把你家钥匙交给了几个不同的人,他们都可以来你家搬东西,就是这个道理。

引用《JavaScript高级程序设计》的截图:

!但是要注意,在函数中传递参数的时候,参数都是按值传递的,基本类型好理解。如果参数是应用类型,那么把这个引用类型的引用地址传给函数中局部变量。

--------------------再温习一下数据类型-----------------------------

基本数据类型前三个就不说了,说说各自说说null, undefined,最后再进行对比一下。

null:字面的意思就是,空,无。可以用null表示一个尚未存在的对象,当对象的属性赋值为null,表示删除该属性,被垃圾回收机制回收了。

undefined:在使用var声明变量,但未对其加以初始化时,这个变量的类型就是undefined,且其默认初始化值为undefined。

console.log(typeof null);          //object

console.log(typeof undefined);  //undefine

ECM说null是一个不存在的对象的占位符,其实null就是js对象原型链的终点,即:Object.prototype.__proto__ 为null。而null表示没有对象,可以这么理解:万物皆是从无到有,这个 "无" 不就是 null 了么???这就扯到另外一个话题了。

----copy一份----

alert(typeof 1);                // 返回字符串"number"
alert(typeof "1"); // 返回字符串"string"
alert(typeof true); // 返回字符串"boolean"
alert(typeof {}); // 返回字符串"object"
alert(typeof []); // 返回字符串"object "
alert(typeof function(){}); // 返回字符串"function"
alert(typeof null); // 返回字符串"object"
alert(typeof undefined); // 返回字符串"undefined"

js变量的一点认识的更多相关文章

  1. js变量及其作用域

    Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量   一.js变量的类型及 ...

  2. js变量申明提前及缺省参数

    现在最先的行为准则:js变量申明必须带var:然后开始随笔: 函数中的变量申明在编译的时候都会提到函数开头. 例如: function foo(){ console.log('some code he ...

  3. JS 数据类型转换-转换函数、强制类型转换、利用js变量弱类型转换

    1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型 ...

  4. js变量以及其作用域详解

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp73   一.变量的类型  Javascript和Java.C这些语言不同 ...

  5. iframe子页面与父页面元素的访问以及js变量的访问

    1.子页面访问父页面元素  parent.document.getElementById('id')和document相关的方法都可以这样用 2.父页面访问子页面元素  document.getEle ...

  6. 【repost】 JS变量重复声明以及忽略var 声明的问题及其背后的原理

    JS的容错率很高,一些其他语言常见的小错误JS都能大度得包容,比如给一个方法传入超出预计的参数.在声明变量之前使用该变量(变量的声明提升解决了这个问题)等等,这里我们就要解剖一下JS变量重复声明以及当 ...

  7. js变量提升与函数提升的详细过程

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  8. js变量以及其作用域

    一.变量的类型  Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: ...

  9. js 变量声明 (var使用与不使用的区别)

    js 变量声明 (var使用与不使用的区别) 一.总结 一句话总结:不使用var声明变量的时候,变量是全局对象(window对象)属性,在全局中使用var声明变量是全局变量 var 全局变量 局部变量 ...

随机推荐

  1. Extensions in UWP Community Toolkit - Overview

    概述 UWP Community Toolkit  中有一个 Extensions 的集合,它们可以帮助开发者实现很多基础功能,省去自己造轮子的过程,本篇我们先来看一下 Extensions 的功能都 ...

  2. R语言-离职率分析

    案例:员工流失是困扰企业的关键因素之一,在这次的分析中我将分析以下内容: 对一些重要变量进行可视化及探索分析,收入,晋升,满意度,绩效,是否加班等方面进行单变量分析 分析员工流失的因素,探索各个变量的 ...

  3. linux下执行java类(运行java定时器)

    假如有一个定时器TimerTest.java import java.io.IOException; import java.util.Timer; public class TimerTest { ...

  4. Mac里安装Jmeter

    前提是需要安装jdk,参见http://www.cnblogs.com/fun0623/p/4703456.html 1.解压包 (双击apache-jmeter-2.13) 2.进去到解压后的bin ...

  5. shiro的sessionManager类继承结构及主要类方法

    shiro1.3.2 sessionManage的作用是对会话进行管理. 1.类结构 2.主要接口介绍 SessionManager: 包括两个方法,一个是新建会话,一个是通过key获取会话 Vali ...

  6. hdu-2602&&POJ-3624---01背包裸题

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602 https://vjudge.net/problem/POJ-3624 都是01背包的裸题 这 ...

  7. CNN中减少网络的参数的三个思想

    CNN中减少网络的参数的三个思想: 1) 局部连接(Local Connectivity) 2) 权值共享(Shared Weights) 3) 池化(Pooling) 局部连接 局部连接是相对于全连 ...

  8. [转]map函数补充

    map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于li ...

  9. hue集成hive访问报database is locked

    这个问题这应该是hue默认的SQLite数据库出现错误,你可以使用mysql postgresql等来替换 hue默认使用sqlite作为元数据库,不推荐在生产环境中使用.会经常出现database ...

  10. 有意思的c++题目

    #include <iostream> #include<stdlib.h> using namespace std; class A { public: int _a; A( ...