论javascript中的原始值和对象

javascript将数据类型分为两类:原始值(undefined、null、布尔值、数字和字符串),对象(对象、函数和数组)

论点:原始值不可以改变,对象可以改变;对象为引用类型;

原始值不可以改变‘不可以改变,如果动脑筋的同学肯定会怀疑了,你们字符串可以改变啊,不信你瞅下面的

var a = ‘aa‘;
alert(a.toUpperCase());//弹出 AA

其实,这些只是表面现象,原始值字符串‘a‘其实并未发生改变,只是拷贝了一份然后对新的拷贝使用‘toUpperCase‘函数而已,有下面代码为证

var a = ‘aa‘;
a.toUpperCase();
alert(a);//弹出‘aa‘

瞅着了吧,其实字符串‘a‘并没有发生变化

原始值的比较是值得比较,他们值相等时才相等。

对象和原始值不同,他们的值可以修改,如下

var obj = {‘a‘ : 1, ‘b‘ : 2};
obj.a = 3;
obj.b = 4;

var arr = [1, 2, 3];
arr[0] = 4;

对象的比较并发值得比较,即使两个对象包含同样的属性和值,它们也是不相同的


奉上以下代码为证:

var a = {‘x‘ : 1}, b = {‘x‘ : 1};
alert(a === b);//false

var c = [1], d = [1];
alert(c === d);//false

对象的值都是引用,对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等

对象的值都是引用‘ 奉上如下代码以为证

var a = {‘x‘ : 1};
var b = a;
a.x = 2;
alert(b.x);// 弹出2

var c = function(){
   this.x = 1;
}
var d = new c;
var e = d;
d.x = 3;
alert(e.x);//弹出3

var aa = [1, 2, 3];
var bb = aa;
aa[0] = 11;
alert(bb[0]);//弹出 11

对象的比较均是引用的比较,当且仅当它们引用同一个基对象时,它们才相等‘ 奉上如下代码为证

var a = [1, 2, 3];
var b = a;
a[1] = 5;
alert(a === b);//弹出true

var  aa = [1, 2, 3];
var bb = [1, 2, 3];
alert(aa === bb);//弹出false

如我们上面的论述,对象的赋值只是赋值的引用,并没有进行任何拷贝,如果你想要得到一个拷贝的副本,则必须显式的为对象的每个属性或数组的每个元素进行拷贝,如下

var a = [1, 2, 3, 4, 5];
var b = [];
for(var i =0, _len = a.length; i < _len; i++){
  b[i] = a[i];
}

同样的如果我们想要对比两个数组或者对象,必须将数组或对象的每个元素或属性进行比较

鄙人才疏学浅,有不足之处,欢迎补足!

时间: 2024-11-17 20:11:57

论javascript中的原始值和对象的相关文章

javascript中的原始值和复杂值

前面的话 javascript的数据类型可以分为两种:原始类型(基本类型或者简单类型)和引用类型. 原始类型:Undefined,Null,Boolean,Number,String五种: 引用类型:Object,Array,Function: 与此相对应的,它们的值分别被称为原始值和复杂值. 特性 原始值 原始值是表示javascript中可用的数据或信息的最底层的形式或者最简单的形式.原始类型的值被称为原始值,因为它们的值是不可被细化的.也就是说,数字是数字,字符串是字符串,布尔值是true

关于javascript中的 执行上下文和对象变量

什么是执行上下文 当浏览器的解释器开始执行我们的js代码的时候,js代码运行所处的环境可以被认为是代码的执行上下文,执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(executable code)概念进行区分.一般来讲,执行上下文可以在以下三种情况产生: 1. 全局上下文(globalContext)   2. function 内部 3. Eval code. 看个例子,包含全局和function内部上下文 紫色框内表示全局的执行上下文,同时内部会有3个不同的

javaScript中eval()方法转换json对象

原文:javaScript中eval()方法转换json对象 <script language="javascript"> var user = '{name:"张三",age:23,'+ 'address:{city:"青岛",zip:"266071"},'+ 'email:"[email protected]",'+ 'showInfo:function(){'+ 'document.wri

Javascript中的Keycode值列表

关于如何得到一个键在Javascript中的Keycode值,可以参考: <body onkeypress=alert(event.keyCode)>请按任意键,你将得到该键的键值! keycode 0 = keycode 1 = keycode 2 = keycode 3 = keycode 4 = keycode 5 = keycode 6 = keycode 7 = keycode 8 = BackSpace BackSpace keycode 9 = Tab Tab keycode 1

sort方法实际应用详解---javascript中对一个对象数组按照对象某个属性进行排序

转载: 查看原文 在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同.在javascript中,也有一些精妙的算法,用来对一些对象进行排序.我在面试迅雷的时候,也拿到一道题,当时做题的时候考虑到时间,没有去仔细研究,回来后再读了一些方法,就知道真正的考点在哪里了. 我们现在有一组"学生"对象,包含"名字,年龄"等属性,现在要求一个算法,把这些对象放在一个数组里,可以实现按照年龄对这些对象进行排序. var sdts = [ { name

Javascript中的&quot;函数是第一类对象(first-class object)&quot;

本身这句话很好解释,函数有两个主要特点,援引自 陈新 译的<JavaScript模式>: 1.函数是第一类对象: 函数可以在运行时动态创建,还可以在程序执行过程中创建. 函数可以分配变量,可以将它们的引用复制到其他变量,可以被扩展,此外,除少数特殊情况外,函数还可以被删除. 可以作为参数传递给其他函数,并且还可以有其他函数返回. 函数可以有自己的属性和方法. 2.函数提供了作用域 在JavaScript中,没有使用花括号{}语法来定义局部变量的作用域,也就是说,块并不能创建作用域.这也就意味着

Javascript 中的this 指向的对象,你搞清楚了吗?

Javascript 中的this 总让人感到困惑,你能分清以下三种test1(),test2(),test3() 情况下的输出吗? 注:以下Javascript运行环境中为浏览器 //1 this在全局函数中使用 var x = 1; function test1() { var  x = 5; alert(this.x); } function _test2() { this.x = 5; alert(this.x); } //2 this 在构造函数中 new 中使用 function t

javascript中的arguments内置对象

什么是arguments arguments 是是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的.所有主要的js函数库都利用了arguments对象.所以agruments对象对于javascript程序员来说是必需熟悉的. 所有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数.他不是一个数组,如果用typeof arguments,返回的是'object'.虽然我们可以用调用数据的方法来调用arguments.比如length,还有

ES6新特性:Javascript中的Map和WeakMap对象

Map对象 Map对象是一种有对应 键/值 对的对象, JS的Object也是 键/值 对的对象 : ES6中Map相对于Object对象有几个区别: 1:Object对象有原型, 也就是说他有默认的key值在对象上面, 除非我们使用Object.create(null)创建一个没有原型的对象: 2:在Object对象中, 只能把String和Symbol作为key值, 但是在Map中,key值可以是任何基本类型(String, Number, Boolean, undefined, NaN..