javascript基础
1.理解javascript基础知识
(1)理解数值
在javascript中,所有数值都是64位双精度,也就是说javascript中整数和浮点数之间并没有甚么区分
二者都是数值.
typeof 1
//number
typeof 1.5
//number
(2)javascript中没有内置的10进制数据类型,但javascript为数字提供了两个方法:toPrecision()和foFixed()
这两个方法可以依照固定位数的小数来格式化数值
var num=13.433
num.toFixed(2);
//13.43
var num=1232.4343
num.toPrecision(5);
//1232.43
注意:如果使用1个超越64位范围的数值,或得到1个超越64位范围的值,javascript将返回1个特殊数值
:-Infinity(负无穷大)或Infinity(无穷大),除数为0将返回1个Infinity,其他特殊值还包括NaN,它表示
1个"非数值",当试图将1个无效字符串对象转换1个数值时,结果为NaN,在NaN值和数值之间履行1个操作
将返回1个NaN值,可使用内置的isNaN()函数来检查1个变量是不是是NaN值
10*1+100-NaN
//NaN
var x=NaN
isNaN(x)
true
(3)javascript支持8进制和106进制,8进制字面量用1个0作为前缀,106进制数值则以1个x作为前缀
(4)javascript内置的Math对象用于常见的数学运算,可使用Math.round()方法或得两位数的精度
Math.round(.2+.3)/100;
(5)使用字符串:字符串是1个由0个或多个16位unicode字符组成的系列,使用单引号或双引号将字符串括起
字符串也是不可变对象,因此字符串具有1些相应的属性和方法
"test.javascript".indexOf("s");
//2
"test.javascript".charAt(3);
//t
(6)布尔类型
Boolean类型表示true值和false值,在适当的上下文中,比如在1个if语句中,任何条件判断的值都将被转化为Boolean
值以判断"真"或"假"在条件判断中,空字符串,NaN值,null,undefined,数值0和关键字false都将被计算false其他的任何值
都将被计算为true
if(""){
Console.log("something happen");
}
else{
console.log("nothing happen");
}
//nothing happen
javascript支持的Boolean操作包括,逻辑与(&&)逻辑或(||)逻辑非(!)
function validate(){
var name_input="Jimmy";
var age_input;
return name_input&&age_input;
}
if(validate()){
console.log("pass");
}else{
console.log("fail");
}
//fail
NaN值表示1个非数值的值
typeof NaN
//number
(6)类型之间的比较
javascript具有等于(==)和同等(===)操作符,==操作符是危险的,由于他在履行比较前,强迫履行类型
转换
1=="1"
//true
如果左操作数和右操作数真正完全相同===才会返回true
1==="1"
//true
(7)日期简介
javascript内置了Date对象,可使用new操作符和Date()构造函数来创建Date对象,Date对象用于表示日期和
时间,不带任何参数创建1个新的Date对象,取得的是1个表示当前日期和时间的Date对象
var thisMoment=new Date();
console.log(thisMoment);
//thisMoment.getFullYear();
//2014
(8)其他类型
声明1个变量未对其赋值,或访问1个不存在的对象属性,结果将会产生1个undefined类型
null是javascript的1个内置对象,它表示没有值,在履行比较运算时,undefined和null二者被转换false
Number
String
Boolean
Object
Function
Array
Date
Regex
Null
Undefined
在使用try...catch语句中,某些附加的内置的error类型非常有用,通常在throw语句中新建error对象
(9)变量
可以通过赋值操作(隐式声明)或通过var关键字(显示声明)来为声明1个变量,可使用var关键字来
声明变量,则该变量是持久的,且不能删除该变量,对1个变量可以屡次进行声明,没必要担心产生任何
毛病,由于初始化的变量会被赋值为undefined
i=0;//隐式声明
var i=0;//显示声明
var x;//undefined
作用域是指变量和对象的可见范围,全局变量global在利用程序的任何地方都是可见的,而局部变量则
在声明该变量的函数内可见
function where(){
var v1="local scope";
v2="globe scope";
}
where();
console.log(v1);//v1 is not undefined
console.lon();//globe scope
2.函数和对象
对象是属性的集合,每个属性是1个名称和值,属性可以包括除undefined以外的任何类型,在创建对象
以后,可以对属性进行赋值,数组,函数和正则表达式都是对象,数值(number)字符串(string)和布尔值都是
对象(boolean)但他们是不可变的对象,可以采取两种方法来实例化1个对象
(1)使用new关键字来实例化1个对象
var myObject=new Object();
new关键字将调用构造函数(构造器),构造器将初始化新创建的对象,this关键字用于援用当前对象,不能对它进行
赋值,但可以将this关键字赋值给另外1个变量
//构造函数
function Zombie(name){
this.name=name;
}
var smallZombie=new Zombie("Google");
(2)另外1种实例化变量的方法是使用对象字面量,这类方式创建的字面量更像其他语言中的散列或关联数组
var myObject={}
var objectWithProperty={
"property1" : "a string value",
"property2" : 12
}
两种方法访问属性
objectWithProperty.property1
//a string value
objectWithProperty['property']
//a string value
var species{
'mamal'{
'name':'string'
}
}
console.log(species.namal.name);
//string
javascript是1种动态语言,因此更新1个属性只需要重新对属性赋值便可,需要从对象中移除1个属性
使用delete操作符,要遍历对象的所有属性使用for...in循环
var obj={
'property':1,
'property':2
}
var i;
for(i in obj){
console.log(i);
}
//property1
//property2
javascript使用原型继承(prototypal inheritance),对象直接从其他对象继承,从而创建新的对象,简而言之
对象继承了另外1个对象的属性,javascript中没有类(原型就是其他对象的模型)
3.javascript的作用域,闭包和履行上下文
1个内置对象Object.property位于继承层次的顶端,所有其他对象都继承了该对象,在继承树中的每一个对象
都可以通过prototype属性链连接起来
//对象和函数的关系
var fn=function(){};
console.log(fn instanceof Object);//true
对象是1种函数
function fn(){
this.name="zhangsan",
this.age=10;
}
var fn=new fn();
对象可以通过函数来创建
对象都是通过函数来创建的
var obj={a:10,b:10};
var arr=[2,3,'x'];
以上代码的本质是:
var obj=new Object();
obj.a=10;
obj.b=10;
var arr=new Array();
arr[0]=5;
arr[2]='x';
...
console.log(typeof(Object));//function
console.log(typeof(Array));//function
//当创建新的对象时,请注意如何初始化对象
//obj1和obj2都是援用同1个对象
var obj1=obj2={};
//obj1和obj2不是援用同1个对象
var obj1={};
var obj2={};
//对象是自知的(self aware),也就是说对象知道自己的属性。要检查某个属性是不是存在。可使用hasOwnProperty()方法,
该方法将返回1个Boolean值
获得属性都是通过delegation实现的,当试图获得1个不存在的属性时,javascriptIan将从原型对象查找该属性
,如果仍然没有找到该属性,则javascript将沿着原型树(prototype tree)向上查找,直到找到原始的Object.prototype
以后,如果仍然没有找到该属性,则javascript解析器将放弃查找并返回1个undefined
funcion 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(){
conlose.log("test");
}
援用(referrence)是1个指向对象实例位置的指针,Object是援用类型,由于所有的对象都是通过援用传递的,修改与1个