jQuery高级编程(2)javascript基础

标了一些不理解的部分用问号显示!希望有人能解答再见
1、JS是一种动态类型的,面向对象的脚本语言,他运行在宿主环境之中,他的宿主环境通常是一个WEB浏览器。

2、JS没有类的概念,使用原型实现继承

3、JS还具有函数式程序语言的特性:闭包,将函数作为第一类(first-class)对象,匿名函数,高阶函数.....

4、在JS中,所有数值都是64位双精度的,取值范围从-5e-324到1.7976931348623157e308

5、JS中整数和浮点数都是number类型

>typeof 1;

>typeof 1.5;

6、所有JS数值都会按照IEEEE-754双精度二进制数标准进行表示。

>.1+.2

0.30000000000000004

7、JS没有内置的十进制数据类型,但是JS为数值提供了两个方法:toFixed,toPrecision,这两个方法可以按照固定数的小数来格式化数值

num.toFixed(2);//保留两位小数

num.toPrecision(8);//共保留8位

8、如果使用了超出64位范围的数值或者获得一个超出64位范围的值,JS返回一个特殊数值:Infinity无穷大,-Infinity。其他特殊值还有NaN

9、有内置的isNaN(x);

10、JS支持八进制(基数8,0开头)和十六进制(基数16,x开头)

???

Math.round((.1+.2)*100)/100

0.3

11、充分利用内置对象可以节省时间,提高效率

12、使用字符串,字符串是一个由0或者多个16位unicode字符组成的系列。字符串也是不可变得对象,常用方法比如说

“zifuchuan”.indexOf("z")

0

"zifuchuan".charAt(0)

z

13、空字符串,NaN值,null,undefined,数值0和关键字false都是false

14、typeof NaN 得到number

15、==会在比较值钱进行强制类型转换

16、日期(建议使用Date.js库)

var thisMoment=new Date();

console.log(thisMoment);

console.log(thisMoment.getFullYear());

输出:

Tue Nov 07 2017 15:18:19 GMT+0800 (中国标准时间)
2017

17、避免出现undefined因为undefind可以被重新赋值

18、null是JS的一个内置对象

19、Js支持的数据类型:Number,String,Boolean,Object,Function,Array,Date,RegEx,Null,Undefined

20、各种不同的error类型:Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError

21、如果使用var关键字来声明变量,那么该变量是持久的,且不能删除该变量。隐式(没有var)声明的变量是全局作用域。

22、数组,函数,正则表达式,数值字符串布尔值都是对象(红字是不可变),两种方式实例化对象

(1)通过new

var myObkect=new Object();

new关键字会调用构造函数(构造器),this关键字引用当前对象,不能对他赋值,但是可以把this关键字的值赋给另一个变量?

//构造函数

function Zombie(name){

this.name=name;//这样不算赋值么??

}

var smallZombile=new Zombile(“book”);

(2)对象字面量方式

var myObject={

"prop1":"prop1value",

"prop2":"prop2value"

};

获取:

myObject['prop1']

“prop1value”

myObject.prop2

"prop2value"

23、因为是动态语言所以更新一个属性只需要重新赋值,移除一个属性只需要delete,遍历用for...in

for(var i in 对象){}

24、JS使用原型继承

原型继承:对象直接从其他对象继承。原型就是其他对象的模型

一个内置对象Object.prototype位于继承层次的顶端,所有其他对象都继承了该对象。在继承树中的每一个对象,都可以通过prototypr属性连接起来。

25、获取属性通过delegation,如果属性不存在那么会通过原型对象查找该属性,如果还是没有会通过圆形原型树向上查找,直到查到原始的Object.prototype,再找不到返回undefined

26、可以通过将函数添加到原型对象来创建方法,也可以直接将函数添加到对象。方法总是具有名为this的参数,this是对调用该方法的对象的一个引用

		function Monster(type){
				this.type=type;
			}
			Monster.prototype.getType=function(){
				return this.type;
			}
			function Zombie(name){
				this.name=name;
			}
			Zombie.prototype=new Monster();
			Zombie.prototype.eatPeople=function(){
				
			console.log("taste like chicken");
			}


没有输出?

27、引用reference是一个指向对象实例位置的指针。Object是引用类型,由于所有对象都是通过引用传递的,修改绑定于一个原型的属性,将修改基于该原型的所有其他对象的原型

smallZombie.eatPeople().//smallZombie是哪里的?

delete Zombie.prototype.eatPeople;//写了这句才会执行taste like chicken,不知道为什么?

28、初始化对象

//引用同一个对象

var obj1=obj2={};

//obj1和obj2引用的是不同的对象

var obj1-{};

obj2={};

29、要检查对象的属性是否存在可以使用

hasOwnProperty()返回的是布尔值

30、减少冲突的方法

(1)使用单个全局变量作为顶层对象

ZOMBIE_GENERATOR={}

ZOMBIE_GENERATOR.Zombies={

smallZombie:'bb',

largeZombie:'bue'

}

(2)使用闭包

31、函数没有返回值那么就返回undefined

32、JS是第一类的(first-class)意味着可以像处理其他js对象一样处理js函数,可以给函数赋一个变量,或者保存在另外一个数据结构中(数组或者对象)

33、第一类函数两个特性非常重要->对于jQuery来说

(1)将函数作为参数传递给其他函数

(2)匿名函数

->立即调用的函数表达式IIFE或者称为自执行匿名函数

(function(x,y){

console.log(x+y);

})(5+6);

11

包装在圆括号里面会把function(){}块识别成一个函数表达式

34、IIFE

			var x=42;
			console.log(x);
			var message=(function(x){
				return function(){
					console.log("x is "+x);
				}
			})(x);
			message();
			x=12;
			console.log(x);
			message();



无论在外部作用域中x的值发生了什么变化,闭包将记住函数执行时变量x的值

35、理解执行上下文

执行上下文是一种对象,代码在执行上下文环境中执行。可以通过this关键字访问执行啥执行上下文,this关键字是对当前执行上下文对象的引用。

36、除了不能访问this关键字和参数之外,嵌套函数可以访问外部函数中定义的变量,这一机制是通过闭包来实现的,她指的是即使在外部函数结束执行之后,内部嵌套的函数继续保持它对外部函数的引用。闭包还有助于名称空间的冲突。

37、每次调用一个包裹的函数时,虽然函数的代码并没有改变,但是js将为每一次调用创建一个新的作用域。

			function getFunction(value){
				return function(value){
					return value;
				}
			}
			var a=getFunction(),b=getFunction(),c=getFunction();
			console.log(a(0));//0
			console.log(b(1));//1
			console.log(c(2));//2
			console.log(a===b);//false



38、当定义一个独立函数(不绑定任何对象的时候),this关键字绑定于全局名称空间。作为一个最直接的结果,挡在一个方法内创建一个内部函数时,内部函数的this关键字将绑定于全局名称空间,而不是绑定于该方法。为了解决这一问题,可以将包裹方法的this关键字简单赋值给that(中间变量)

??

			obj={};
			obj.method=function(){
				var that=this;
				this.counter=0;
				var count=function(){
					this.counter+=1;
					console.log(that.counter);
				}
				count();
				count();
				console.log(this.counter);
			}
			obj.method();



//书上1 1 2运行0 0 0,除非把this改成that?

39、在js中可以实现与私有或者专有属性类似的访问级别效果,要实现私有访问或者属性,请使用闭包

function TimeMachine(){
				//私有变量
				var destination="october 5,1959";
				//公有变量
				this.getDestination=function(){
					return destination;
				};
			}
			var delorean=new TimeMachine();
			console.log(delorean.getDestination());
			console.log(delorean.destination);
40、声明一个名称空间,将有关函数绑定于该名称空间,并定义私有成员和专有成员即可

要有设置器和访问器

41、JS数组,两种方式创建

(1)Array()

(2)数组字面量

42、扩展类型???

			String.prototype.boolean=function(){
				return "true"==this;
			};
			var t='true'.boolean();
			var f='false'.boolean();
			console.log(t);
			console.log(f);

每次反复输入prototype显得累赘,因此有简洁的method方法可以扩充Function.prototype

Function.prototype.method=function(name,func){

this.prototype[name]=func;

return this;

};

			String.method('boolean',function(){
				return "true" == this;
			});
43、使用parsetInt最好指定基数或者用加号

parseInt("010",10);

+"010"

44、尽量用===,避免意料之外的类型转换

45、尽量不用eval(),里面的字符串会作为js代码执行

46、构造函数尽量首字母大写,其他函数不要大写

47、不要使用with语句

?原因


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值