n这是个麻烦的话题,文字很不好组织,不知道我是否能组织好语言
固有对象
:
未定义
空值
布尔值
字符串
数值
通用对象
数组
函数
等都是(其他一些和我们的话题有些远,就不说了)
未定义
和
空值
的不同:
-
未定义
是个值,是个关键字,表示一个对象没有值
-
空值
是个值,是个关键字,它的值就是 空 null,表示一个对象的值是null
这个说法可能不够标准不过:
typeof undefined;//undefined
typeof null;//object
JavaScript是面向对象的,所有的值都应该有一个类型,可是唯独undefined是个特殊的.undefined是关键字
null是值,也是对象,也是关键字.理由是:
Function=5;//可以这样
null=6;//不行,这就是为什么说null是关键字了,一个特殊的对象,undefined也有这个特性
也就是说,Function,Array,Object都是一个函数对象,可以改变,undefined,null是关键字,不能改变.
非固有对象
:
由固有对象构造出的对象就是非固有对象.我们还是简称对象更容易描述些.对象都有值,也许值是null或者undefined.
var str='string';//等同
var str=new String('string');//等同
var str=String('string');
===ps ===
今天看了一篇文章才发现,上面有不同的,
var str='sssss';
typeof str=='string';
var str= new String('ffff');
typeof str=='object';
===ps end===
这三句都做了同样的事情.可以这样描述:
-
创建了一个对象,他的名字是:str
-
创建了一个字符串型的对象,他没有名字(匿名
),他的值是:string
-
令str指向这个匿名
对象:str 的类型和值也就同这个匿名
对象一样了
当然JavaScript引擎是否优化这个实现,使得这个说法站不住脚,已经不重要了.概念是这样的.
var obj={str:5,o:{v:'dfd'}};
用同样的描述方法我们来说说:
-
创建了一个对象,他的名字是:obj
-
创建了一个匿名对象
{str:5,o:{v:'dfd'}}
-
令obj指向这个匿名
对象:obj 的类型和值也就同这个匿名
对象一样了
请使用FireFox+FireBUG来测试.console是FireBUG的调试API
var obj1={n:5,o:{v:'obj1v'}};
var obj2=obj1;
obj2=3;
console.dir(obj1);//obj1没有改变
obj2={};
console.dir(obj1);//obj1没有改变
obj2=obj1;
obj2.o={v:'obj2v'};
console.dir(obj1);//obj1改变了
第1次,obj1没有改变,是因为
obj2=3;
重新创建了一个匿名对象3,改变了obj2的指向
第2次的情况和第1次一样.
第3次
-
创建了一个匿名对象
{v:'obj2v'}
-
令obj2.o指向这个匿名对象的值
那为什么obj1.o也变了?让我们再看看
var obj2=obj1;
在JavaScript里由于obj1是一个非值型
对象这样的赋值是引用,对于引用
变量obj2,所有对obj2的成员操作
都会施加到obj1的成员上.
var obj3='string';
obj1=obj3;
向这样的操作,对于obj1来说不是成员操作,所有obj2不会改变.
再回头看看上面的描述,和关于类型
中的
无法对
值类型赋予新的可变成员
是对应的,因为你无法对
值类型赋予新的可变成员
,自然就不会有成员操作
(当然指的是新成员,这话还不够严谨,prototype过来的算不算),因此说:(注意前提,不讲prototype的情况)
不存在值类型成员操作,只存在非值型成员操作,成员操作具有传染性
var o1={v:'dfd'};
var obj={str:5,o:o1};//obj.o引用o1
var o2=obj;//o2引用obj,
o2.o={};//成员操作
console.dir(obj);//传染了,obj.o改变
console.dir(o1);//o1不是obj的成员,不变
var obj1={str:5,o:o1};//obj1.o引用o1
var o3=obj1;
o2.o.v='aaa';//v可就是实实在在的{v:'dfd'}中的v呀
console.dir(o1);//o1变了
o1不是obj的成员?当然,o1和obj.o只不过都指向{v:'dfd'}罢了.再举个例子
var o={};
o.f=function(){return 1;};
var oo=o;
oo.f=function(){return 2;};//仍然是成员操作,传染
o.f();//2
其实如果你学习过c/c++了解指针操作的话,我这个解释根本是多余的
分享到:
相关推荐
本程序专注于16进制数据与浮点型数据之间的转换,这对于理解计算机内部如何存储和处理不同类型的数据至关重要。这里我们将详细探讨相关知识点: 1. **16进制数据表示**: 16进制(Hexadecimal)是一种逢16进1的...
- **特征值和特征向量**:计算矩阵的特征值和对应的特征向量。 - **奇异值分解与行列式**:奇异值分解是一种有用的矩阵分解技术;行列式是衡量矩阵可逆性的指标。 - **最小二乘拟合及QR分解**:最小二乘法是解决...
- **特征值和特征向量**:`eigen()`函数用于计算矩阵的特征值和特征向量。 - **奇异值分解与行列式**:`svd()`函数用于奇异值分解,`det()`函数用于计算行列式。 - **最小二乘拟合及QR分解**:`lm()`函数用于最小...
在R中,可以通过赋值操作来创建和保存数据对象。同时,也提供了`rm()`函数来删除不再需要的对象,以节省内存空间。 #### 二、简单操作;数值与向量 ##### 2.1 向量与赋值 向量是R中最基本的数据结构之一,用于存储...
重复性和再现性分别通过极差图和评价人员之间的平均值差异来评估。稳定性则关注在一定时间段内测量值的总变差。零件间变差反映了不同零件固有的差异,也需在MSA中考虑。 综上所述,MSA是保证产品质量、控制生产过程...
7.3 赋值操作符和赋值表达式.64 7.4 关系操作符和关系表达式.65 <<page 2>> page begin==================== 7.5 逻辑操作符和逻辑表达式.68 7.6 位 运 算 .69 7.7 其它特殊操作符 .72 7.8 小 结 ....
- 特征值和特征向量是线性代数中的重要概念。 - 使用`eigen()`函数计算特征值和特征向量。 #### 六、列表和数据帧 **列表** - 列表可以存储不同类型的对象。 - 使用`list()`函数创建。 **构建和修改列表** - ...
这是因为每次向对象添加元素时,R都会创建一个新的对象来容纳所有元素,这涉及到内存分配和复制,从而消耗大量时间和计算资源。为了提高性能,应预先分配足够的空间,并在创建对象时填充所有元素,避免多次增长操作...
特征值和特征向量在矩阵分析中非常重要,R提供了计算这些值的函数。 **5.8 奇异值分解与行列式** 奇异值分解(SVD)是一种重要的矩阵分解方法,可用于数据压缩和降维。而行列式是衡量矩阵可逆性的指标。 **5.9 ...
- **BINARY_INTEGER** 和 **PLS_INTEGER**:均为整数类型,特别适合处理整数值,性能表现优秀。 - **BINARY_FLOAT** 和 **BINARY_DOUBLE**:浮点数类型,分别对应单精度和双精度浮点数,适合处理包含小数的计算任务...
最后,试卷还要求根据LATCH和DFF的逻辑图编写VHDL代码,并阐述两者差异。LATCH是边沿触发的存储元件,而DFF是时钟控制的边沿触发器,DFF在时钟脉冲到来时捕获输入,提供更为稳定的输出。 这份试卷全面地考察了学生...
而prop方法则用来处理DOM属性(即properties),通常这些属性对应于DOM对象的固有特性,如`<input>`的`checked`、`disabled`属性等。 #### 1.2. 对于HTML标签和DOM元素的不同处理 在处理HTML标签时,attr方法会...
DNA序列由于其固有的随机性,成为了研究随机序列的理想对象之一。本研究提出了一种新颖的方法,即通过2D共轭图来表示DNA序列,以直观展示其特性。该方法由两部分组成:首先利用测量模型将DNA数据转换为数值,随后...
答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其...
渐进估计对算法的理论分析和大致比较非常有价值,但在实践中,细节也可能造成差异。例如,一个具有较低常数因子的O(n²)算法,在n较小的情况下,可能比一个具有较高常数因子的O(n log n)算法运行得更快。然而,当n...
最后,通过比较每一个聚集之间的数据差异就能够找出最终研究的目标,从而解决了成本和时间问题。 7. 连接分析 连接分析是一种方法,它旨为这种方式找到最为可靠、最为便利的方法,而不是一直在追求更为完美的方法...
C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。PCLint识别并报告C语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析,能识别...