开发你不能忽略的问题?JavaScript(JS)
一、JavaScript基础加强
JavaScript是在浏览器内容运行,无需编译、解释执行动态脚本语言,是一种弱类型语言,所有变量使用var定义。
JavaScript的3个组成部分分别为:核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)
1.ECMAScript核心语法
①:代码编写位置
分为内部JS和外部JS【使用src进行引入】
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>JavaScript程序编写</title>
<!-- 内部JS -->
<script type="text/javascript">
// 编写JavaScript代码
alert(1);
</script>
<!-- 外部JS-->
<script type="text/javascript" src="1.js"></script>
②:学习顺序
JavaScript依次从变量(标示符、关键字),运算符,程序结构(if while for),以及函数来进行学习。
(1)所有的变量使用var来定义,是弱类型变量,不代表没有类型,变量本身还是有类型的。【var a=10,var b=1.5;他们分别为整数以及浮点数类型】
(2)每行结尾分号可有可无,建议编写。
(3)注释和Java类似,支持单行注释(//)和多行注释(/* */)
③:数据类型
JavaScript分为原始数据类型和引用数据类型,分别存储于栈和堆中。
原始数据类型:number、string、boolean、null和undefined
引用数据类型:存在很多种,每种都是object对象
可以使用typeof查看数据类型,使用instanceof判断变量数据类型
Demo:
<script type="text/javascript">
// 定义所有变量都用var,但是变量本身具有类型
vara = 10; // 整数
varb = 1.5; // 浮点数
varc = true; // 布尔
vard = "abc"; // 字符串 基本数据类型
vare = 'abc'; // 字符串
// 通过typeof查看数据类型
alert(typeof d);
// 通过instanceof判断变量数据类型
alert(d instanceof Object);//falae
alert(a instanceof Object);//falae
vars = newString("abc"); // 对象类型
alert(s instanceofObject);
</script>
④:null和undefined的区分
null:对象不存在;
undefined:对象存在,访问属性或者方法不存在(对象未初始化)
2.ECMAScript对象
ECMAScript常用的有7个对象,依次为String、Number、Boolean、Math、Date、Array以及Regxp。
①:String类型常用属性方法
建议查看手册,这里需要注意的为length属性以及match方法
charAt()、concat()、indexOf()、lastIndexOf()、match()、replace()、split()、substr()、substring()、toLowerCase()、toUpperCase()
Java中提供matches方法 例如:"1234".matches("\d+") ---- 返回true
JavaScript 与 matches方法等价的那个方法,是 RegExp 对象提供test方法
例如:/^d+$/.test("1234") --- 返回true
/^d+$/ 等价于 new RegExp("^\d+$")
"1234".match("^\d+$") 返回是匹配正则表达式内容,而不是布尔值,等价于 /^d+$/.exec("1234")
②:Math常用属性和方法
PI 属性
round(x) 把数四舍五入为最接近的整数
random() 返回 0 ~ 1 之间的随机数
pow(x,y) 次幂
sqrt(x) 平方根
③:Date常用属性和方法
toLocaleString() 返回当地本地化日期格式 2012年12月12日 11:07:52
getTime() 返回从1970年1月1日到目前为止 毫秒值
Demo:
<script type="text/javascript">
vars1 = "abc"; // s1是基本数据类型
vars2 = newString("abc") ; // s2是对象类型
// alert(s1 == s2); //
// alert("98"==98);// true
// alert("true"==true); // false
// alert(1==true); // true
vard = 010;// 八进制
vard2 = 0x10; // 十六进制
// match方法 类似 Java中 matches,有区别
// alert(/^d+$/.test("1234abc")); // 等价于 java中matches
// alert("1234".match("^\d+$")); // math方法返回的是匹配正则表达式内容,而不是布尔值
// alert(/^d+$/.exec("1234abc1234"));// 返回匹配的内容
// Date使用
vardate = newDate(); //当前日期
alert(date.toLocaleString());// 返回当地国际化日期格式
vardateStr = date.getFullYear()+"-"+date.getMonth()
+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()
+":"+date.getSeconds();
alert(dateStr);
</script>
④:Array常用属性方法
push() 加入元素到数组
pop() 从数组移除最后一个元素
reverse()反转
join() 连接数组元素 通过特定内容 返回字符串
sort() 排序
slice() 截取数组中指定元素 从start到end
Demo:
<script type="text/javascript">
// 定义数组 使用Array对象
// 方式一
vararr1 = [1,2,3];
// 数组的遍历 通过长度和下标
for(vari=0;i< arr1.length ; i++){
// alert(arr1[i]);
}
// 方式二
vararr2 = newArray(3);// 定义长度为3的数组
arr2[0] = "aa";
arr2[1] = "bb";
arr2[2] = "cc"
arr2["100"] = "dd";
// alert(arr2.length);
// alert(arr2[4]);
// 方式三
vararr3 = newArray(1,2,3);// 数组三个元素 1, 2 ,3
// alert(arr3.join("-")); // 1-2-3
alert(arr3.slice(1,3)); // 从1下标,截取到3下标,1下标包含,3下标不包含
</script>
3.ECMAScript核心语法——函数
①:函数定义的三种方式
注意:第二种方式使用越来越多,第三种不常用,第一种常用
<script type="text/javascript">
// 方式一
functionadd(a,b){ // 没有返回值,形参不需要声明类型
returna+b; // 可以返回
}
// alert(add(1,2));
// 方式二 function 匿名函数, sub成为函数名称
varsub = function(a,b){
returna-b;
}
// alert(sub(10,8));
// 方式三 使用Function对象 定义函数
// 语法 new Funtion(arg1,arg2 ... , body)
varmul = newFunction("a","b","return a*b;"); // 不常用
// alert(mul(10,20));
// 所有函数 都是Function实例
alert(mul instanceofFunction);// true
</script>
②:JavaScript全局函数(内置函数)
一组与编码解码相关的函数
encodeURI()&decodeURI()
encodeURIComponent()&decodeURIComponent()
escape()&unescape()
此块具体内容请参照W3C文档查看。
4.ECMAScript核心——JavaScript面向对象编程
Java是面向对象,写Java程序,写类和对象。JavaScript是基于对象,写Js,不用创建类,使用Js内部已经定义好的对象。
①:定义JavaScript对象的两种方式
方式一:使用已经存在的对象,通过关键字进行创建
vars = newString("aaaa");
varo = newObject();
vardate = newDate();
// alert(date instanceof Object);// true
// JS对象 类似一个map结构
vararr = newArray(3);
arr[0] = 100;// 使用数组下标 为数组元素赋值
arr['aaa'] = 1000; // 定义对象属性
// alert(arr['aaa']);
arr.showInfo = function(){// 定义对象方法
alert(arr.join(","));
};
// arr.showInfo(); //100, ,
Js其实就是一个类似map结构,key为属性名和方法名,value为属性值和方法定义
方式二:通过{}创建
varobj = {
name : '张三',
age : 20,
getName : function(){
// 访问对象属性 通过关键字 this
return this.name;
}
};
// 访问对象 属性 [] 和 .
// alert(obj.name);
// alert(obj["age"]);
alert(obj.getName());
// 添加一个方法到 obj对象
obj.getAge = function(){
return this.age;
}
alert(obj.getAge());
JavaScript中的对象是通过 new function创建的,在Js中function等同于一个类结构
// 定义类 结构
varProduct = function(name,price){
this.name = name; // 保存name的值 到对象属性中
this.price = price;
}
// 基于类结构创建对象,使用new 关键字
varp1 = newProduct("冰箱",1000);
varp2 = newProduct("洗衣机",1500);
// alert(p1.name);
// alert(p1.price);
function本身代表一个函数,JavaScript对象通过new function来获得的,理解function就是对象构造函数
②:Object和function的关系
JavaScript中所有引用类型都是对象Object实例 ------- Function instanceOf Object //true
JavaScript 中所有对象都是通过 new Function实例(function) 获得 ------ Object instance Function //true
JavaScript所有对象构造函数都是function实例;JavaScript所有对象都是object实例,function也是object实例。
使用JavaScript的传递性进行推论!
A:function是用来定义一个函数,所有函数实例都是Function对象
B:JavaScript中,所有对象都是通过new function得到的
Var Object = function(){...}
Var String = function(){...}
Var Array = function(){...}
Var Date = function(){...}
结论:所有对象构造器都是Function实例
alert(String instanceOf Function) //true
alert(Object instanceOf Function) //true
C:创建一个对象,需要使用new function
Var s = new String()
Var o = new Object()
Var arr = new Array()
Var date = new Date()
结论:JavaScript中,一切对象都是object实例
alert(s instanceOf Object) //true
alert(Function instanceOf Object) //true
varf = newFunction(); // 实例化Function对象
varo = newObject(); // 实例化Object对象
alert(f instanceofFunction); // true
alert(f instanceofObject); // true
alert(o instanceofFunction); // false
alert(o instanceofObject); // true
③:function原型属性
JavaScript所有对象都由function构造函数得来的 ,通过修改 function构造函数 prototype属性,动态修改对象属性和方法。
④:继承
A:使用原型链完成JavaScript单继承
varA = function(){
this.name = 'xxx';
}
varB = function(){
this.age = 20;
}
// 方式一 可以通过 prototype原型完成单继承B的原型指向A
B.prototype = newA(); // 从A实例中,继承所有属性
varb = newB();
alert(b.name);
// 练习:通过prototype为String类添加一个trim方法
String.prototype.trim = function(){
return this.replace(/(^s*)(s*$)/g, "");
}
B:对象冒充完成多继承
varC = function(){
this.info = 'c';
}
varD = function(){
this.msg = 'd';
}
varE = function(){
// 同时继承C和D
this.methodC = C;
this.methodC();
delete this.methodC;
this.methodD = D;
this.methodD();
delete this.methodD;
this.desc = 'e';
}
vare = newE();
// alert(e.info);
// alert(e.msg);
// alert(e.desc);
⑤:动态方法调用
可以改变this的指向,可以完成对象多继承
// 定义函数
functionprintInfo(){
alert(this.name);
}
// 属性name 值 张三
varo = {name: '张三'};
// o.printInfo();// 函数不属于对象o
// JS提供动态方法调用两个方法,允许一个对象调用不是属于它自己的方法(call apply)
// printInfo.call(o);
// printInfo.apply(o);
functionadd(a,b){
this.sum = a+b;
}
// call传 多个参数
// add.call(o,8,10);
// apply 传递参数数组
add.apply(o,newArray(8,10));
// alert(o.sum);
// 动态方法调用 ,实现多重继承,原理就是对象冒充
varA = function(){
this.info = 'a';
}
varB = function(){
// 动态方法调用继承
A.call(this);
}
varb = newB();
alert(b.info);
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法