javascript启示录读书笔记

先普及一下书中提到的一些术语
(1)原始值:1,“2”,false,true,null,undefined
(2)复杂值又称为复杂对象或引用对象:new String/Number/Array/Object/Boolean()等
//原始值
var str2 = String('12');
var str = '22';

//复杂值
var obj = {};
var str = new String();

1.构造函数实例拥有指向构造函数的constructor

var foo = function(){};
var obj = {};
var str = new String();
var arr = [1,2];


foo.constructor;//function()
obj.constructor;//Object()
str.constructor;//String()
arr.constructor;//Array()

原始值和构造函数也是有关系的,所以constructor也指向构造函数。

2.也可以查看自定义构造函数的实例对象。用constructor查看实例对象的构造函数,构造函数在定义的时候必须给出函数名称。

//有函数名称
var myFunction = function myFunction(){
};

//匿名函数
var noNameFunction = function(){};

my_fn = new myFunction();
my_fn.constructor;//myFunction()

my_no_name_fn = new noNameFunction();
my_no_name_fn.constructor;//function

作用:查看别人编写大量代码时,尤其是不知道new实例对象的构造函数时,可以用constructor查看生成此实例的构造函数。但是如果知道构造函数,可以使用instanceof验证。


3.instanceof需要特别注意的地方:只有复杂值和new生成的实例对象instanceof返回true

var noNameFunction = function(){};

my_no_name_fn1 = new noNameFunction();
my_no_name_fn2 = noNameFunction();

my_no_name_fn1 instanceof noNameFunction;//true
my_no_name_fn2 instanceof noNameFunction;//false

var name ="sam";
name instanceof String;//false

var name = new String("sam");
name instanceof String;//true

var obj = {
name:"obj"};
obj instanceof Object;//true

4.构造函数创建的实例可以拥有自己的独立属性

var name='sam';
name.foo = 'foo';
name.foo; //undefined,字面量和原始值是不支持此功能的

var name = new String('sam');
name.foo = 'foo';
name.foo;//'foo'

var myFunction = function(){};
my_fn1 = new myFunction();
my_fn2 = myFunction;
my_fn1.foo = "foo";
my_fn1.foo;//'foo'
my_fn2.foo = "foo";
my_fn2.foo;//'foo'

my_fn3 = new myFunction();
my_fn3.foo;//undefined

5.javascript对象都是动态的,也就是说javascript对象是可以改变的。

Number.prototype.calculate = function(a,b){
return a+b;
};
num = new Number();
num.calculate(1,2);

6.typeOf操作符:原始值中undefined返回的就是undefined,null返回的就是object,其余的按照自己的类型来;复杂值返回的是object,function除外,返回的是Function。

7.在进行对象比较的时候要谨记:原始值比较采用值比较,复杂值比较采用引用比较。

var str_compare = 'sam';
var str_to = 'sam';
str_compare === str_to;//true

var obj_1 = {name:'sam'};
var obj_2 = {name:'sam'};
obj_1 === obj_2;//false
obj_3 = obj_1;
obj_1 === obj_3;//true

8.复杂对象具有动态属性
所谓的复杂对象具有动态属性,是指对复杂对象的复制是引用拷贝,改变任何一个拷贝的属性值,其他都会跟着改变。

var obj_1 = {name:'sam'};
var obj_2 = obj_1;
obj_1.name = 'tom';
obj_1.name;//tom
obj_2.name;//tom

var arr =[1,2];
arr_copy = arr;
arr_copy[0] = 3;
arr;//[3,2]

9.删除对象属性

var obj_1 = {name:'sam',class:1};
delete obj_1.name;
obj_1.name;//undefined

10.head对象与全局属性、全局变量
所谓全局变量就是直接包含在head对象内部的值。

var name = 'sam';
var fn = function(){
console.log(window.name);
}();

11.引用head对象的两种方式:直接赋值,使用this

var name = 'sam';
var window_var1 = this;
var window_var2 = window;
var fn = function(){
console.log(window_var1.name);//'sam'
console.log(window_var2.name);//'sam'
}();

//但是head对象是隐式的,显示调用降低性能。
var name = 'sam';
var window_var1 = this;
var fn = function(){
console.log(name);//'sam'
}();

12.javascript中等同于false的值:0,-0,null,“”,undefined,NaN,false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值