解析Javascript中难以理解的11个问题
1。原始值和参考值原始值存储在堆栈中,并且引用值存储在堆中。
复制代码代码如下所示:
功能人(ID,姓名,年龄){
this.id = ID;
this.name =名称;
this.age =年龄;
}
var = 10;
VaR BOL =真;
varabc;
var obj =新的对象();
var arr = {'a',B,C};
var =新人(100),白痴的座右铭
2.undefined和空
未定义变量:它是未定义类型的独占值;
NULL:引用没有被分配,它是null类型的独占值。
Typeof(定义)=未定义;
Typeof(空)=对象;
未定义的=空的;
未定义!= null;
nullinstanceof对象= =假;
未定义的实例对象= false;
虽然有未定义的null类型,下面的例子表明这两种类型是不可见的,也就是说,我们只能使用它们的值。
Alert (undefined instanceof Undefined);
警报(空是空的);
三.拟阵
特征:
1)具有长度属性;
2)以数组的索引顺序访问数据。
3)没有阵列特定操作数据的方法,如推、弹出、切片…
拟阵都可以通过Array.prototype.slice转换为真正的数组:
无功facearray = { 0:A,1 B,长度:2 } / /标准的拟阵;
无功realarray = array.prototype.slice.call(fakearray);
在JS伪数组:争论,node.childnodes,document.getelementsbytagname()…
在伊江的问题:node.childnodes伊江不能转换层。
jQuery中的伪数组:jQuery本身是一个伪数组:
警报($('。class1)。长度);警报($('。class1)。{ 0 }。tagname);
4。简单类型的字面量
var a = 1;b = true,=;
文字数量似乎是类型。
警报(种类); / /数量
警报(类型B); / /布尔
警报(类型C); / /串
但它不能衡量的是
警报(一个实例数) / /假
警报(一个实例对象) / /假
警报(B是布尔) / /假
警报(B实例对象) / /假
警报(C是字符串) / /假
警报(C实例对象) / /假
5的原型性质。函数和对象实例的内部原型属性。
每个函数(构造函数)有一个原型的属性,每个对象实例都有一个看不见的(Mozilla将其公开,可以通过__proto__)原型属性里面,它指向的原型属性的构造函数。原型也有它自己的原型属性,构成一个原型链,目标是最高的目标,所以当所有的原型链最终将指向Object.prototype。当属性 /访问实例的方法,从对象实例本身开始搜索,如果搜索不到,沿着原型链搜索,直到object.prototype.prototype = null为止。
6个小秘密。构造函数
复制代码代码如下所示:
var =新函数(){;
警报(s);{对象对象}
s =新函数(){返回新字符串()};
警报(s);
本代码的解释:
只要构造函数(返回)之后的新表达式返回一个引用对象(数组、对象、函数等),将覆盖由new(返回)创建的匿名对象,如果原始类型的返回(未返回返回的原始类型是未定义的),则返回由新创建的匿名对象。
创建7的过程。物体
复制代码代码如下所示:
功能人(名称){
this.name =名称;
}
person.prototype = { {
getName(){ return这个:函数名称}。
};
var p =新的人('zhangsan);
解密P的创建过程:
创建一个对象的数据对象并初始化;
{ } { }内原型p点person.prototype;
p被用作这个,而参数的参数调用,即执行人函数体并返回值,如果没有返回,则返回不确定。
如果上一步返回的对象类型,返回值,否则返回对象。
8。对象的自身属性和继承属性
复制代码代码如下所示:
功能人(名称){
this.name =名称;
}
person.prototype = { {
类型:,
getName(){ return这个:函数名称}。
};
var p =新的人('zhangsan);
警报(p.hasownproperty()); / /假
p.type = 'ren;
警报(p.hasownproperty()); / /真的
结果是明确的,对象的属性可以在不修改其原型的同名属性,但只创建一个同名的属性并将其分配给它。
9的创作过程。函数对象
在对象对象中创建一个内置;
{ } { }内原型FN设置为Function.prototype;
设置内部{ } }属性,这是一个内部实现方法来处理函数调用的逻辑(简单理解是指向函数体);
设置fn.length到funargs.length,如果函数没有参数,该fn.length设置为0;
原型的构造函数指向FN本身;
返回FN。
对10.instanceof原则
查看A是否是B的实例,也就是说,查看原型(构造函数的原型属性)的对象不在A的原始链上。
11。关于功能与对象的思考
警报(函数是函数); / /真的
警报(函数实例对象); / /真的
警报(对象实例的功能); / /真的
警报(对象实例对象); / /真的
想了很久,没想通…