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. AutoCAD中的扩展字典及扩展记录(C#)

    在学习CAD扩展记录的过程中,遇到了一些问题,也积累了一些经验,现在给大家分享一些我的学习心得.在学习扩展字典之前需要读者了解cad的组码,也就是DxfCode.感兴趣的也可以了解一下扩展数据的相关内 ...

  2. ELK学习总结(3-2)elk的过滤查询

    和一般查询比较,filter查询:能够缓存数据在内存中,应该尽可能使用 建立测试数据 查看测试数据 1.filtered查询 GET /store/products/_search { "q ...

  3. leetcode算法:Reshape the Matrix

    In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...

  4. Python中字符串颜色

    格式:\033[显示方式;前景色;背景色m 说明: 前景色 背景色 颜色 --------------------------------------- 30 40 黑色 31 41 红色 32 42 ...

  5. JVM 掌握要点

    重读JVM jvm系列:jvm知识点总览 1. 认识Java虚拟机 默认Hotspot实现 2. 类加载机制 知道双亲委派模型 编译为class javac → 装载 class ClassLoade ...

  6. java内部类、接口、集合框架、泛型、工具类、实现类

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.内部类 1.成员内部类. (1)成员内部类的实例化: 外部类名.内部类 ...

  7. echarts版本折线图

    1.效果如下:         绘制折线图,应该算是说echarts中使用最简单也算使用频率最高的一种功能了吧.根据官网列子能找出规律,只是有些属性对于初接触者来说,会有点陌生,不过仔细阅读一下还是不 ...

  8. 扩展第二屏幕发生Out Of Range及扩展后耳机没声音解决方案

    新年好\(^o^)/~ 拓展屏幕这种事情.其实很简单的.无非就分辨率跟刷新频率.有时候一接好就可以了.有时候怎么也弄不出来.我也是搞了蛮久.昨天突然弄通了.小记一下说不定能帮到同需求人. [设备] 主 ...

  9. 开发一个成功APP的六个技巧

    越来越多的人开始使用智能手机,平板电脑或其他的移动设备.出于这个原因,移动APP开发已成为当今软件开发中增长最快的领域之一.本文提供九个简单而有效的提示,可帮助您规划和实施成功的移动APP. 1.目标 ...

  10. [LeetCode] Longest Palindromic Subsequence 最长回文子序列

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...