JavaScript基本组成
1.基本语法(浏览器基本都支持,有统一标准)
2.Dom(文档对象模型)(基本都支持,但可能会有差别,有统一标准)
3.Bom(浏览器对象,一般功能浏览器支持,但没有统一的标准)控制浏览器可见区域以外的部分(打开新窗口、关闭浏览器窗口、获取分辨率screen、XmlHttpRequest等。)
核心的JavaScript由以下3部分组成:
ECMAScript(基本语法) 语法、类型、关键字、保留字、语句、运算符、对象
Dom文档对象模型(封装好的一些函数库) 在html于xml中都是用dom Xml与html的应用程序接口(api)
Bom浏览器对象模型 XMLHttpRequest、ActiveXObject对象等。浏览器特有的。
JavaScript基本语法
<a href=“javascript:js代码">热门文章</a>只有超链接的href中的JavaScript中才需要加“javascript:” 因为它不是事件 ,而是把” javascript :” 看成像“ http:” 、“ ftp:” 、“ thunder://” 、“ ed2k://” 、“ mailto:” 一样的 网络协议 ,交由 js 解析引擎处理。只有 href 中这是这是一个特例。
超链接为“死链”时,使用 # 与 javascript:void (0); 的区别
使用#,超链接访问自己本页面,而javascript:void(0);是计算括弧里的表达式无返回值
JavaScript数据类型
undefined===null//false(*),先判断类型是否一致,然后判断值
JavaScript变量作用域
Switch case 相当与全等于 ===
类型转换
parseInt(arg)//将指定的字符串,转换成整数
parseFloat(arg)//将指定的字符串,转换成浮点数
Number(arg)把给定的值(任意类型)转换成数字(可以是整数或浮点数);转换的是整个值,而不是部分值。如果该字符串不能完全转换为整型,则返回NaN。(Not a Number)
isNaN(arg)//判断arg是否为一个非数字(NaN),NaN与NaN也不相等。
String(arg)把给定的值(任意类型)转换成字符串;
Boolean(arg)把给定的值(任意类型)转换成Boolean 型;
(*)eval(codeString)//将一段字符串的js代码,计算并执行。类似于动态SQL语句。
alert(eval(‘2+3’));
eval(‘alert(100);’);
与调用对象的toString()方法等效。
特列:当对象为null或undefined时,调用toString()会报错,而String()可以转换成功。
Example:
var v = null; v= String(v); //v的结果是”null”
var v; v=String(v); //v的结果是”undefined”
arguments对象
动态为方法传递参数,类似于.net中的params关键字作用
<scripttype="text/javascript">
function myFunc() {
for (var i = 0; i < arguments.length; i++) {
document.write(arguments[i]);
document.write('<br/>');
}
}
myFunc('张三', 18, '李四', 19);
</script>
JS面向对象基础
函数就是对象,对象就是函数。
方法直接调用为函数,用new调用为对象。
JavaScript中没有类的语法,是用函数闭包(closure)模拟出来的,下面讲解的时候还是用C#中的类、构造函数的概念,JavaScript中String、Date等“类”都被叫做“对象”,挺怪,方便初学者理解,不严谨。JavaScript中声明类(类不是类,是对象)。
Example(写一个Person对象):
function Person() { } //ok,就这么简单。
如何使用Perosn对象?
var p=new Person();// “var p” 不是 “Person p”。
p.Name=‘张三’;//动态语言,所以可以直接写。
p.Age=30;
p.SayHello=function() { alert(‘Hi~’); }
alert(p.Name);
alert(p[‘Age’]);//另外一种动态访问属性的方式。
JS面向对象基础2
JavaScript同样支持this关键字
构建一个带参数的Person对象。通过this关键字为对象的属性赋值。
function Person(name, age) {
this.Name = name;
this.Age = age;
this.ShowInfo = function() {
alert('大家好,我叫' + this.Name + ',今年' + this.Age+ '岁了。'); }}
var zjl = new Person('周杰伦', 20);
zjl.ShowInfo();
function Person(name,age)可以看做是声明构造函数,Name、Age这些属性也是使用者动态添加了。【var p1 = Person(“周杰伦", 20);//不要丢了new,否则就变成调用函数了,p1为undefined。】new 相当于创建了函数的一个实例。
String对象
length属性:获取字符串的字符个数。(无论中文字符还是英文字符都算1个字符。)
charAt(index)方法:获取指定索引位置的字符。(索引从0开始)
indexOf(‘字符串’,startIndex)方法:获取指定字符串第一次出现的位置。startIndex表示从第几个开始搜索。
split(‘分隔符’,limit);//根据分隔符将一个字符串返回为一个数组。limit表示要返回的数组的最大长度(可自定义)。多个分隔符使用正则表达式:var msg = 'a★b★c☆d☆e#f';var vals = msg.split(/☆|★|#/);alert(vals);
substr(startIndex,len)//从startIndex开始,截取len个字符。
substring(startIndex,stopIndex)//从startIndex开始,截取到stopIndex位置(不包括stopIndex所在的字符)。
toUpperCase()//转换大写、toLowerCase();//转换小写
match()、replace()、search()方法,正则表达式相关
Array对象
JavaScript中的Array对象就是数组,首先是一个动态数组,而且是一个像C#中数组、ArrayList、Hashtable等的超强综合体。
数组的使用方式:
• var names = new Array();//无需初始化长度,动态
• names[0] = "tom";
• names[1] = "jerry";
• names[2] = "lily";
循环遍历数组(for循环):
• for (var i = 0; i < names.length; i++) {
• alert(names[i]);
• }
循环遍历数组(forin循环):类似于c#中的foreach.
• for (var i in names) {
• alert(names[i]);//如果直接输出i是什么?
• }
• 使用forin循环可以遍历对象的所有属性。【演示:遍历window对象】
• for in循环其实遍历的还是key.
数组的其他几种声明方式:
• new Array();
• new Array(size);
• new Array(element0, element0, ..., elementn);
• var arr = [‘China’, 2008, true, ‘Hello’];(推荐。)
JS中的Dictionary
JS中的Array是一个宝贝,不仅是一个数组,还是一个Dictionary,还是一个Stack(栈集合,不能是Dictionary)。
• var pinyins = new Array();
• pinyins["人"] = "ren";
• pinyins["口"] = "kou";
• pinyins["手"] = "shou";
• alert(pinyins["人"]);
• alert(pinyins.人);
字典风格的简化创建方式:
• var arr = {“人”:”ren”,“口”:”kou”};//json格式。
像Hashtable、Dictionary那样用,而且像它们一样效率高。
不能直接用for循环遍历,需要用forin循环。
Dictionary风格数组的length为0。所以不能用for遍历
扩展方法
通过类对象的prototype设置扩展方法,下面为String对象增加quote(两边加字符)方法
String.prototype.quote= function(quotestr) {
if (!quotestr) {
quotestr ="\"";
}
return quotestr +this + quotestr;
};
alert("abc".quote()); alert("abc".quote("|"));
扩展方法的声明要在使用扩展方法之前执行。JS的函数没有专门的函数默认值的语法,但是可以不给参数传值,不传值的参数值就是undefined,自己做判断来给默认值。