javascript基础t.docx
《javascript基础t.docx》由会员分享,可在线阅读,更多相关《javascript基础t.docx(62页珍藏版)》请在冰豆网上搜索。
javascript基础t
Javascript基础:
面向对象;
http:
//
DOM文档对象模型;
eg:
window.document.write();
alert();
var定义变量;
prompt();
varthe_name=prompt(“”,””);
javascript字符集:
javascript采用的是Unicode字符集编码。
为什么要采用这个编码呢?
原因很简单,16位的Unicode编码可以表示地球人的任何书面语言。
这是语言国际化的一个重要特征。
(大家也许见过用中文写脚本,比如:
function我的函数(){});
Javascript中每个字符都是用2个字节表示的。
(因为是16位编码)
大小写敏感:
js是一种区分大小写的语言。
注意下:
以前我也犯过的错误。
HTML是不区分大小写的。
经常看见有人这么写,
(这样写是对的)
如果放到JS中,就必须使用onclick(小写哦!
)
同时XHTML中也只能使用小写。
这个我们并不需要太关心,象这种问题,其实都可以自己给自己定一个标准,自己写程序的时候全部小写。
另外每行程序后分号也是一样,我们都写上。
注释:
单行:
//注释1
/*注释2*/
多行:
/*注释3
*注释3
*注释3
*/
标识符:
标识符就是一个名字,用来命名变量和函数。
规则:
第一个字母必须是字母,下划线(_),或美圆符号($)。
为什么第一个字母不能为数字?
如果第一个为数字,js很容易就把它当作数字处理了,那么命名就没意义了,js规定了后,就很容易的区分了标识符和数字了。
直接量:
就是程序中直接显示出来的数据值。
比如:
12,1.2,“hello“,true,null,[1,2,3,4]
这些都是直接量。
保留字和关键字:
具体是哪些,可以去搜索。
其实我们只要不取一些特郁闷的名字,都不会冲突的。
js数据类型:
3种基本的类型:
数字,字符串和布尔值。
2种小数据类型:
null和undefined.(为什么叫小数据类型?
因为他们只定义了一个值)
1种复合类型:
object.(在这个类型中,它的值可以是基本数据类型,也可以是复合类型,比如其他的object.)
注意:
在对象中有一个特殊的对象----function.(它是一个可以执行代码的对象.)
其他的一些对象:
数组:
Date类:
是日期的对象。
RegExp类:
正则表达式的对象。
Error类:
js中发生错误的对象。
使用数据类型注意的地方:
数字:
由于数字有什么8进制,10进制,16进制等。
。
。
八进制:
varnum=011;//以"0"开头
十六进制:
varnum=0x1f;//以"0x"开头
所以对于js这个都能识别的语言来说,就必须得注意。
alert(377);//377
alert(0377);//255=3*64+7*8+7*1
进行算术运算有个重要的对象:
Math.
具体可以去网上下载手册,查询里面的方法。
2个有用的函数:
isNaN()和isFinite()
isNaN():
用于检查其参数是否是非数字值。
//提示:
是非数字哦。
(notanumber)
document.write(isNaN(0))//返回false
document.write(isNaN(5-2))//返回false
document.write(isNaN("Hello"))//返回true
isFinite(number)函数用于检查其参数是否是无穷大。
如果number是有限的,则返回true.如果number是NaN(非数字)或者是无穷大,则返回false;
字符:
‘you’reright’;
这样写的话js会误以为在you字母后就结束了,引起错误。
所以当遇到这种情况的时候,必须用到转义。
我们可以这么写:
‘you\’reright’;
另外:
你可以搜索转义序列表。
字符串的简单操作例子:
vara="cssrain";
varb=a.charAt(a.length-1);//从字符串a中截取最后一个字符。
输出:
n
varc=a.substring(0,2);//从字符串a中截取第1,2个字符。
输出:
cs
vard=a.indexOf('s');//从字符串a中查找第一个s出现的位置。
输出:
1
从例子可以看出,基数都是从0开始的。
vare=a.substring(a.length-1);//可以看出,substring第2个参数不写的话,
//默认是到最后。
varf=a.substring(a.length-1,a.length);//等价于
数字跟字符之间的转换:
数字转字符:
varnumber_to_string=number+“”;//方法1:
添加一个空的字符串。
varnumber_to_string=String(number);//方法2:
使用String()函数。
varnumber_to_string=number.toString();//方法3:
使用toString()函数。
注:
toString()方法默认是以10进制转换。
如果要使用8进制转换可以这么写:
number.toString(8);
字符转数字:
varstring_to_number=string–0;//方法1:
字符串减去0。
varstring_to_number=Number(string);//方法2:
使用Number()函数。
varstring_to_number=parseInt(string);//方法3:
使用parseInt()函数。
方法1中不能用string+0;这样会导致字符串拼接,而不是类型转换。
方法2中的Number函数转换,比较严格。
比如:
vara="19cssrain86";
varb=Number(a);//输出NaN.
如果我们使用方法3。
varc=parseInt(a);//输出19
可以看出parseInt()会自动忽略非数字的部分。
parseInt()只取整数部分,忽略小数部分。
parseFloat()会把小数部分也取到。
和toString()一样,parseInt也有进制,默认是10进制。
如果想使用8进制,可以这么写:
parseInt(“077”,8);//输出63=7*8+7
当字符以0开头的时候,我们必须把第二个参数指明,不然js可能会以8进制去转换。
布尔类型:
布尔在数字环境中:
true转换为1,false转换为0。
在字符环境中:
true转换为“true”,false转换为“false”。
布尔转换:
varx_to_Boolean=Boolean(x);//方法1:
使用Boolean()函数。
varx_to_Boolean=!
x;//方法2:
使用感叹号。
函数的定义:
方法1:
普通定义
functionsquare(x){
returnx*x;
}
方法2:
函数直接量定义
varsquare=function(x){returnx*x;}//推荐使用
方法3:
构造参数
varsquare=newFunction(“x”,”returnx*x;”);//效率低
对象:
如果有一个名为cssrain的对象,他有一个高度height的属性。
那么我们可以这么引用:
cssrain.height;
还可以使用关联数组定义:
cssrain[“height”];
创建对象:
方法1:
varpoint=newObject();
point.x=3;
point.y=5;
方法2:
使用对象直接量
varpoint={x:
3,y:
5}
当然json也可以咯。
对象在字符的环境下,会调用toString()方法。
数字环境下,会调用valueOf()方法。
布尔环境下,非空对象为true;
7):
数组:
常规数组:
以非负整数做为下标。
image[0]
关联数组:
以字符做为下标。
如:
image[“width”]
js不支持多维数组,但数组里面可以嵌套数组。
创建数组:
方法1:
vara=newArray();
a[0]=“1”;
a[1]=2;
a[2]={x:
1,y:
3};
方法2:
vara=newArray(“1”,2,{x:
1,y:
3});
注意下:
如果只传了一个参数;比如vara=newArray(3);
那么它是表示:
3个未定义元素的新数组。
方法3:
使用数组直接量
vara=[“1”,2,{x:
1,y:
3}];//注意外面的括号,不是花括号。
8):
null和undefined:
null表示无值;
undefined:
使用一个并未声明的变量,或者使用了已经声明的变量但未赋值或者使用了一个并不存在的属性。
undefined==null
如果要区分:
可以使用===或者typeof运算符。
9,新手常遇到的疑惑:
vars=”youareright”;
varb=s.substring(s.lastIndexOf(“”)-1,s.length);
疑惑:
s是对象还是字符串,为什么字符串会有方法呢?
回答:
s是字符串。
之所以有方法,是因为string类型有一个相应的对象类(String)。
同样数字和布尔都有相应的Number,Boolean类。
Js会内部进行相应的包装对象。
String对象就替换了原始的字符串。
总结:
简单了介绍了js中的一些概念(词法结构)和数据类型(部分)。
好了,今天就说到这里,明天我们继续。
^_^。
笔记我已给部分群员看过,有好的评论也有不好的评论。
所以我郑重声明下:
这是我看了DOM编程艺术,悟透JavaScript,javascript权威指南5做的笔记,
我资质不深,不能写出高深的文章,
如果你觉得笔记写得不好,可以不看我以后的。
这篇文章就当作浪费你几分钟。
上篇文章讲了js中的一些概念(词法结构)和数据类型(部分)。
这章我们继续.然后了解下js中操作数据和函数的作用域。
1,对象跟基本类型之间的转换:
不管何时,只是对象非空,在布尔环境中都为true.
如;
newBoolean(false);
newNumber(0);
newString(“”);
newArray();
上面虽然内部值是false,但对象的值是true;
ObjectàvalueOf()àtoString()
其中Date类,是先执行toString()转换。
2,js中操作一个数据值:
任何语言都有自己的操作数据的方法;
Js也不例外,js有3种重要的方式来操作一个数据值。
复制它。
例如把它赋给一个新的变量。
把它作为参数传递给一个函数或方法。
可以和其他值比较大小。
Js通过传值和传址2种方式操作这些数据的值。
从名称可以看处,传值是通过传递值来操作数据。
在赋值的过程中,对实际的值进行了拷贝,存储到一个新的变量中。
拷贝的值和原来的值是2份完全独立的值。
所以如果你改变了拷贝的值,并不会影响原来的值。
当比较大小时候,通常进行琢个字节比较。
传址从名字来看,就是通过传递地址来操作数据。
在赋值的过程中,对实际的值的地址(可以说是引用)进行了拷贝,他们不是完全的独立,所以如果你通过引用改变了值,那么原始的值也会改变。
当比较大小的时候,通常是看他们是否引用同一个地址来比较。
简单的传址例子:
vara=newDate();
alert(a.getDate());
varb=a;
b.setDate(21);
alert(a.getDate())//输出21
3,一般来说:
基本数据类型通过传值来操作的。
(如果忘记了哪些是基本数据类型,可以往回看。
)
对象数据类型通过传址来操作的。
(比如数组和函数)
例子:
//传值
a=1;
b=a;
b=2;
alert(a);//输出1
//传址
x=[1,2];
y=x;//赋给y的只是x的一个引用,而不是x本身。
数组已经在语句中被赋值了,执行过这段代码后,仍旧只有一个数组对象,只不过我们有2个对他的引用了。
y[0]=2;
alert(x[0]+"|"+x[1]);//输出2|2
其中我们必须注意字符串:
js中字符串是通过传址来复制和传递的,而他们是通过传值来比较的。
对象和数组是用传值来传递的,只不过传递的这个值实际是一个引用,而不是对象本身。
总结:
类型复制传递比较
数字传值传值传值
布尔传值传值传值
字符串不可变不可变传值
对象传址传址传址
不可变:
在JS中,没有方法去改变字符串值的内容。
对字符串来说,传值还是传址,意义不大。
4,垃圾收集机制:
Js中自动释放内存。
比如:
vars=”heelo”;
varb=s.toUpperCase();
s=b;//运行到这里后,js会自动检测不再使用某个对象,因为s=b了,所以js会自动释放字符串“heelo”所占的存储空间。
即我们不能再获取原始的“heelo”值;.
5,javascript变量:
Js是非类型的。
它的变量可以放任何类型的值。
变量的声明:
vara;
varb;
或者
vara,b;
或者
vara=0,b=1;
重复声明是合法的,
如果遗漏声明,js会隐式的声明该变量。
当然隐式声明的变量总是全局变量。
6,变量的作用域:
Js有2种:
全局和局部。
从名字的定义可以知道,全局变量的作用域是全局性的。
在js代码中,处处都有定义。
局部变量的作用域是局部的。
在函数体内定义。
同名的局部变量的优先级比同名的全局变量高,下面的例子说明了这点:
vara="abc";//全局变量
functioncheck(){
vara="efg";//同名的局部变量
document.write(a);
}
check();//输出efg
看一个比较经典的例子:
varscope="global";
functionf(){
alert(scope);//输出undefined
varscope="local";
alert(scope);//输出local
}
f();
为什么第一个会输出undefined呢?
因为js规定当局部变量和全局变量的名称相同的时候,函数体内的同名全局变量会被隐藏。
那么刚才例子实际等价于:
functionf(){
varscope;
alert(scope);
scope="local";
alert(scope);
}
f();
OK,如果你看懂了这个例子,说明你对局部和全局的一些区别稍微了解了。
7,变量的作用域:
从里到外:
词法作用域作用域链变量查找
varx=1;
functionf(){
vary=2;
functiong(){
varz=3;
}
}调用g()对象;z=3;
调用f()对象;y=2;
全局变量x=1在此定义了吗?
是
否
获得值
在此定义了吗?
是
否
获得值
在此定义了吗?
是
否
获得值
未定义
8,客户端全局变量:
在客户端js中,Window对象代表浏览器窗口,他是一个全局对象。
、
比如;我们常用的parseInt(),Math()都是Window对象定义的属性。
Js允许多个全局变量的执行环境,每个环境有不同的全局对象。
比如:
客户端js的每个独立的浏览器窗口,或者同一窗口的不同帧。
其中的代码都运行在自己的执行环境中,具有自己的全局对象。
当然可以使用表达式parent.frames[0].x;来引用第一个帧中的全局变量x;这样就把不同帧中的代码联系起来了。
不过这里有安全性问题。
总结;
主要讲了传值和传址和函数的作用域。
对新手来说稍微难理解些。
如果还有上篇文章讲了js中的传值和传址和函数的作用域.
这章我们来探讨js中的变量,表达式,和运算符还有一些js语句。
升级中……
1,表达式:
最简单的表达式:
直接量或者变量名。
vara=1;
直接量表达式的值:
本身。
变量表达式的值:
该变量所存放或引用的值。
2,运算符:
一元运算符:
比如-3
二元运算符:
比如3+4
三元运算符:
比如?
:
新手常遇到的问题:
递增运算符:
比如:
i=1;
j=++i;//前递增运算,即先对运算数进行递增,然后再去计算。
//输出i=2;j=2;
i=1;
j=i++;//后递增运算,即先去计算,然后再对运算数进行递增。
//输出i=2;j=1;
3,相等运算符:
=:
赋值运算符;
==:
相等运算符;
===:
等同运算符;
值NaN永远不会与任何值相等,包括自己。
alert(NaN==NaN);//falseNaN意思为NotaNumber
要检测一个值是否是NaN,可以使用全局函数isNaN();
另外新手要注意:
vara=[1,2,3];
varb=[1,2,3];
document.write(a==b);//输出false.(这个其实是第一章讲的内容。
)
//虽然值相同,类型相同,但址不同。
--------------------------------------------------------
vara=[1,2,3];
varb=a;
varc=a;
document.write(b===c);//输出true;
--------------------------------------------------------
vara="1";
varb=true;
document.write(a==b);//输出true
document.write(a===b);//输出false;值相同,类型不同
4,比较运算符:
要注意的就是字符串是进行琢个比较。
而且会区分大小写。
如果你的需求是不区分大小写:
可以使用String.toLowerCase()//纯小写
String.toUpperCase()//纯大写转换后,然后再去比较.
5,in运算符:
要注意的是:
左边的值是其右边对象的属性。
比如:
vara={x:
1,y:
2};
varb=“x”ina;//true
varc=“toString”ina;//true.左边的值是其右边对象的属性。
6instanceof运算符:
要注意的是:
左边的运算数是一个对象,右边的运算数是对象类的名字。
比如:
vara=newDate()
ainstanceofDate;//true
ainstanceofObject;//true
ainstanceofNumber;//false
7,3元条件运算符:
要注意的是:
第一个运算数必须是一个布尔值。
X>0?
3:
2;
8,typeof运算符:
要注意的是:
由于typeof对所有的对象和数组都是返回object;
所以它只能区分对象和原始数据类型时才有用。
要区别一种对象类型和另一种对象类型,可以使用instanceof和constructor属性。
9,delete运算符:
要注意的是:
并不是所有的属性和变量都能删除。
比如:
用var语句声明的变量不能被删除。
另外;当delete删除一个不存在的属性时,返回true;(^_^,这个比较搞笑。
)
vara=1;
alert(deletea);//返回false
alert(deletea.x);//返回true
还有一个应该注意:
Delete所能影响的只是属性值,并不能影响被这些属性引用的对象。
比如:
varmy=newObject();
my.height=newDate();
my.width=my.height;
deletemy.height;
document.write(my.width);//my.width仍然是引用Date对象
10,void运算符:
void的一个用途:
专门生成undefined值、
alert(void(0))
alert(void
(1))//都输出undefined
这里的undefined实际是void()运算后的值。
考虑到向后兼容性,用表达式void0比使用undefined属性更有用.
11,异常处理:
抛出异常:
throw
捕捉异常:
try/catch/finally
If(x>0)
thrownewError(“xmustnotbenegative!
”);
try{
}
catch(e){
}
finally{//总是被最后执行。
通常进行消除操作。
}
12,with语句:
varform=frame