1.JS的历史
a) 1992年Nombas开发出C--,后改名为ScriptEase
b) Netscape 接受Nombas理念,开发了JavaScript
c)微软搭载了一个JavaScript的克隆版叫Jscript.
d)ECMA统一为ECMAScript
javaScript由下面三个部分组成:
a.核心
b.文档对象模型(DOM)
c.浏览器对象模型(BOM)
js是面向对象的语言:
1.封装
2.继承
3.多态
4.聚集 -> 对象中具有引用其他对象的能力.
js使用中绝大多数情况不需要进行面向对象的设计.更多情况是使用已经设计好准备好的对象.
基于对象的语言.
2.JS的引入
1>页面中直接在Script标签中书写
script标签位置任意,但是位置越靠前加载越早。
2>在script标签中引入
js外部文件推荐扩展名是.js,但是其实任何后缀名都可以。
3>使用script标签引入外部文件,那么该script标签中就不要书写js代码。
3.JS的基本语法
1 变量声明
变量声明使用var
变量区分大小写
字符串使用双引号 或单引号包裹都可以
行尾使用“;”作为一行的结束符号(也可以没有“;”,以折行符作为替代)
js中的注释有两种单行,多行
//单行注释“//”
多行注释“/* */”
4.封装代码块与java一样,使用{}
5.变量声明时,前缀var 也不是必须的。
前缀var也可以不加,如果不是var那么该变量是全局变量
4.JS中的类型
java ==> 基本数据类型 和 引用数据类型
js中 类型也分为两种 ==> 原始数据类型 和对象数据类型. 与java一模一样
java中 基本数据类型有哪些? byte short int long float double Boolean char
js 中原始数据类型有哪些?
number(数字,浮点型,整型)
string(js语言的突破,没有char类型.)
Boolean
null(用来标示引用数据类型的占位符. 通常都是人为赋值.) var person = null;
undefined (由null衍生出来的值,是当我们声明一个变量,没有给该变量初始化值,那么系统会自认为赋值为undefined)
原始数据类型 判断符
typeof ==> 用来判断一个变量是哪种原始类型
5.JS中的语句
//java中有哪些语句?
//循环:for while-do do-while
//判断:if swith
//js中语句 与java中一模一样
//特殊:java中增强for循环在js中没有.
js中有for(var xx in xx) 语句 => 用的很少,用来遍历对象的属性。
6.JS中的运算符
一元运算符
void ==> 放到后面,学完函数讲
一元加法,减法
var a = +1;
var b = -1;
在js中的高级应用.
var c = + "1"//这样写是在进行类型转换
var c = -"abc"//这样写会进行类型转换,转换失败。
//boolean运算符
string ==> ""==> 转换为false 其他都为true
number ==> 除了NaN,+0 和 -0.其他都转换为true
//NaN特性:
//1 NaN参与任何boolean运算返回值都是false,除了!=
alert(6>NaN);//false
alert(6>NaN);//false
alert(6==NaN);//false
alert(NaN == NaN); //false
//因为undefined是null衍生出的,所以
alert(undefined == null); //true
比较运算符
alert(11>3);//true
//当运算符两端,一端是数字,一端是其他类型时,一端会向数字类型转换;
//字符串在进行比较时,规律是:比较首字符asc码。如果一样,比较第二位...
alert("11">"3");//false
alert("abc">11);//false
false转换成0;true转换成1;undefined不能转数字
等号和非等号
ECMA定义的对象
Object是所有对象的超类
java中方法,函数
//public void xxx(){}
//function fun1(){ } ==> 这是定义对象。特殊之处,就是像java中的方法一样可以执行
js中的函数对象:
function fun1(){
alert(‘aaa’)
}
alert(fun1.toString())//函数对象的toString方法,打印函数的完整定义
方式1 ==> 函数对象的构造方法中,最后一个参数是定义函数的提。之前所有参数都是
var fun2 = new Function("a","b","alert(a+b);");
相当于function fun2(a,b){
alert(a+b);
}
函数调用:
fun2(1,2);//3
fun2(1,2,3);//3
fun1();//NaN
function fun3(){
alert(arguments.length);
}
fun2(); //0
fun2(1,2); //2
fun2(1,2,3); //3
arguments ==> 代表函数运行时的实际参数列表
//js中存在函数的重载么?如何重载?
function fun3(){
alert('aaa')
}
function fun3(){
alert('bbb')
}
//如上不能重载,是覆盖
重载
function fun4(){
if(arguments.length == 2){
alert(xxx)
}else
if (arguments.length == 3){
}
}
fun4(1,2);//3
fun4(1,2,3);//
return 关键字,在js中也可以作为结束方法运行的功能.
// -- 运算符void( )的使用 ----
alert(void(fun2(1,2)));//undefined
<a href="javaScript:void(fun2(2,3))">点我</a>
<a href="javaScript:void(0)">点我</a>
ECMAScript中对对象的
image.png
JS --> 原始类型string可以使用对象类型的方法和属性。
string Boolean
Boolean 和 Number类型中的方法在开发中几乎不可能用到。
String对象 ==> 学习重点
//length ==> 长度
方法:
1.没用的方法
alert(str1.big())
alert(str1.sub())
alert(str1.bold())
2.重要的方法
//indexof
//lastIndexof
//charAt
alert(str1.charAt(0));
//charCodeAt返回字符所在的asc码
//substring
alert(str1.substring(0,1));//a
//slice 支持负数
alert(str1.slice(0,-1));//a
//3.与正则结合的方法(正则对象讲完回来看。)
//split
//replace
//match
//search
利用三大包装类的构造函数进行强制转换
运算符 ==>
typeof 运算符判断原始数据类型的。
instanceof 运算符用来判断属于哪个对象。
内建对象:
一个是Global对象
//不需要创建实例
global对象:
关于解码和编码的方法:
encodeURI
decodeURI
var url = "http://www.baidu.com?name=?张/三:"
var url2 = encodeURI(url);
alert(decodeURI(url2));
encodeComponent 编码当蹄壳的值中包含一些url中的敏感符号时,使用该方法对敏感符号编码
//isNaN 判断某个值是否是NaN ==> NaN = = NaN => false
alert(isNaN)
//parseInt 转换成整数
//parseFloat 转换成浮点数
var str = "123"
//使用 +
//使用new Number()
//3.parseInt
//区别:1,2两种转换属于将字符串整体转换,如果存在不属于该类,就为NaN
3.从左到右,能转一个是一个,直到遇到不能转换的值停止。
3.与正则结合的方法
//parseFloat 转换成浮点数
//与上面的parseInt一样,区别是支持转换小数
Math对象
不需要创建实例,直接使用即可。
属性:
//PI ==> 3.14159圆周率
方法:
random方法 ==> 返回随机数0~1之间的随机数 包括0不包括1
alert(Math.random());
round方法 ==> 四舍五入方法.
//max/min 方法
//pow ==>次方
//Array对象 ==> 数组
1> 创建方式1
var arr1 = [1,2,3];
2> 创建方式2同方式1
var arr2 = new Array(1,2,3);
3>创建方式3 ==>创建一个长度为3的数组,数组Array的构造函数,如果只传一个参数,并且
var arr3 = new Array(3);
js数组的特点:
//1.js中的数组,类型任意
//2.数组声明了没有赋值,那么它的元素是类型是undefined
//3.方法
var arr4 = [1,2,3]
//join方法 ==> 将数组中的每个元素连接起来返回一个字符串,参数就是连接符
alert(arr4.join("-"));//使用该方法可以模拟一个StringBuilder
//join方法的高级应用.
["a","b","c"] ==> “abc"
//push
pop删除并返回数组的最后一个元素
==> 模拟栈的结构。
队列:先进先出
//shift/unshift ==> 模拟队列的结构
//reverse方法 ==> 将数组中的元素顺序倒置
alert(arr4.reverse()); //3.2.1
//sort方法 ==> 排序的方法.
//注意:该方法默认排序规则,按照字符串规则排序
//如果需要按照数字排序,需要准备一个比较器
var arr5 = [2,9,3,5,7];
alert(arr5.sort())
//函数对象 ==> 比较器
function abc(a,b){
return a-b
}
//Data对象
var date = new Data();//当前时间
alert(date.getFullYear());
alert(date.getMonth());
alert(date.getHours());
//注意:
//1.月份计数时是0~11月,所以要加1获得正常月份
//2.星期计数十0~6.
var date2 = new Date(1000000);
//空参构造获得时间
正则对象
//1.构造方法
//参数1,正则字符串,参数2匹配模式
//用户名必须以字母开头,长度在6到10之间.
//匹配模式有两种
//"i":忽略大小写. i1
//"g":全局匹配global
var reg1 = new RegExp("[a-zA-Z][a-zA-Z_0-9]{5, 9} "," ");
//2 方法
//test 方法 ==> 测试字符串与正则是否匹配
//split 切割字符串
alert(str.split(/0/g))
match方法:alert(str.match(o/g));
js中自带类型转换.
string => Boolean 除了空字符串(" ")其他都是true
number => Boolean 除了 +0, -0, NaN, 其他都是true
null => Boolean false
undefined => Boolean false
object => Boolean true
等性表
null == undefined true
false == 0 true
true == 1 true
2 == true false
NaN == NaN false
NaN == 'NaN' false
NaN != NaN true
类型转换
“+” ==> 可用于将字符串转换为数字,如果含有不能转化的字符,返回NaN.
比较运算符
<,>,<=,>=,==,!=,===
3 > "11" false
“3” > "11" true
11 == "11" true
11 === "11" false
7.对象类型学习
EcmaScrippt中 对象 看成两种:
- 本地对象(Native object)
本地对象中有一部分对象特殊:不需要创建实例,可以直接使用。
Object
Function(特殊)
String
Number
Boolean 以上3个是3个原始数据类型的包装对象。
本地对象中有一部分对象特殊:内建对象(build in object):不需要创建实例,可以直接使用。
Global: 直接写,无需前缀
Math:调用时需要些“Math.”
Array: 1.数组中类型没有限制。
2.数组的长度随着使用而变化的。
Date
RegExp //正则表达式/匹配模式 、test方法
2.主机对象(Host object)
网友评论