一、web发展史:
1.mosaic(马赛克),是互联网历史上第一个获普遍使用和能够显示图片的网页浏览器,1993年问世。
2.Netscape Navigator(网景),后衍生出mozilla firefox(火狐)。
3.JavaScript,1196年出现,最初设计目标是改善网页的用户体验。
二、浏览器的组成:
1.shell部分(贝壳):用户能操作的部分
2.内核部分:
a.渲染引擎(语法规则和渲染)
b.js引擎
c.其他模块
三、js引擎
2001年发布IE6,首次实现对js引擎的优化和分离。
2008年google发布最新浏览器chrome,采用优化后的js引擎,代号v8,以速度快闻名。
Firefox3.5 tracemonkey(对频繁执行的代码做了路径优化)
Firefox4.0 jeagermonkey
四、js特点
1.编译性语言(c c++ ):
优点:快捷
不足;移植性不好,不能跨平台
2.解释性语言(js、php):
优点:可以跨平台,不需要编译成文件
不足:稍微慢,
java--javac--编译成.class--jvm--解释 执行(oak语言)
3.单线程语言 js(同时一件事,同步执行) ECMA标准 ES
轮转时间片:
4.多线程语言(同时多件事,异步执行)
js三大阶段:
ecmascript:原生部分
DOM:操作文档
BOM:操作浏览器
五、主流浏览器及内核:
IE浏览器 trident
chrome blink
firefox gecko
opera Presto
safari webkit
JS:
一、引入js
1.页面级js
<script type="text/javascript"></script>
2.外部js文件
<script type="text/javascript" src="1.js"></script>
js不可以内部外部同时用,同时用内部会失效
二、js基本语法
1.变量
var a; 变量声明
a=100;变量赋值
简化写法: var a=100;
向系统申请一个房间,命名为a,给它赋一个100的值
var a=100;
document.write(a); 把a的值打印到页面
单一var模式:
var a=10,
b=20,
c=30,
d=40,
e=50;
documen.write(a,b,c,d,e);
2.变量的命名规则:
a.变量名必须以 英文字母 或 _(下划线) 或 $ 开头
b.变量名可以包含英文字母 下划线 $ 数字
c.不可以用系统的关键字、保留字作为变量名
--关键字:系统定义的单词,在系统里有特殊的语法含义
(break else new var case finally return... )
--保留字:系统更新升级,系统未来有可能会出现的单词
(abstract enum int short boolean export...)
3. 数据类型--值类型 值决定类型
a.原始值:存stack(栈), 先进去的东西最后出 栈与栈之间的赋值是复制
Number var a = 1234; 数字类型
Boolean var b = true/false ; 逻辑类型
String var b = "你最珍贵"; 字符串类型
undefined var e = undefined;
null var f = null; 占位值类型
b.引用值:存heap(堆), 散放,赋值是引用
Array var arr = []; 数组
Object
function
...
data
RegExp
4.基本语法
a.语句后面要用分号结束
不需分号结束的,如:
function test(){} 函数后
for(){} for循环
if(){}
b.js语法错误会引发后续代码错误,但不会影响其他JS代码块
错误:
低级错误:(语法解析错误)
逻辑错误:(标准错误,情有可原)
c.书写格式要规范,符号两边有空格
5.js运算符
a.加号运算:
数学运算、字符串链接
任何数据类型加字符串都等于字符串
b.- * / %(摩尔) = () 优先级=最弱 ()的优先级较高
var a = 1 + 1 +"a"+ ( 1 + 2 ); 2a3
var a = 0 / 0; NaN (not a number)
var a = 1 / 0; infinity (无限)
var a = 10;
a ++; 11
var a = 10;
a --; 9
顺序:赋值顺序自右向左,计算顺序自左向右
var a = 10;
document.write(a ++); 10
var a = 10;
document.write(++ a); 11
var a = 1;
var b = --a + --a;
document.write( b ); -1
var a = 10;
var b = ++a - 1 + a++;
document.write( b + a ); 33
var a = 10;
a += 10; (a = a + 10); 20
var a = 10;
a *= 2; (a = a +*2); 20
var a = 10;
a %= 2; (10能被2 整除 余数为0) 0
var a = 3;
a %= 4; 3
6.比较运算符
var a = 1 > 2;
document.write(a); false
字符串比较的是asc码,A--65 a--97
var a = 1 == 2;(是否等于)
document.write(a); false
var a = 1 != 2;(是否不等于)
document.write(a); true
NaN不等于任何值,包括自身
7.逻辑运算符
&& 与:全真才真,一假便假
var num = 1 && false;
document.write(num);
a.两个表达式:先看与运算符前面的表达式转换成布尔值是否为真,如果为真,那么它会
看第二个表达式转化为布尔值的结果,如果只有两个表达式的话,只要看到第二个
表达式,就可以返回第二个表达式的值。如果第一个表达式为false,那么它会将
第一个表达式的值返回。
b.多个表达式:第一个真,看二个,第二个真,看第三个,直到遇到假,返回假的值
c.转换成false的值有:undefined null NaN ""(空字符串) 0 false
d.短路语句:如果前面是真,返回后面值,如果前面为假,返回前面值
2 > 1 &&document.write('你好')
执行一个语句,会用到data,&&可以判断data是否有意义
data && function(data):
|| 或:一真便真,全假才假
var num = 0 || false;
dicument.write(num);
a.两个表达式:先看第一个表达式,如果第一个是真,直接返回第一个表达式,如果第一个是假,且只有两个表达式,无论第二个是真是假,都返回第二个表达式的值。
b.多个表达式:遇到真便返回
c.应用:灵活解决兼容性
! 非:转换成布尔值再取反
var a = !123;
document.write(a); false
var a = !"";
document.write(a); true
var a = !!"";
document.write(a); false
三、条件语句
1.if:if(条件){执行语句} 条件成立,执行
if(1 > 0) {
document.write('你好');
} 你好
var score = parseInt(window.prompt('input'))
document.write(score);
if (score > 90 && score <= 100) {
document.write("lihai");
}else if (score > 80 && score <= 90) {
document.write("youxiu");
}else if (score > 70 && score <= 80) {
document.write("lianghao");
}else if (score > 60 && score <= 70) {
document.write("haixing");
}else if (score < 60) {
document.write("buxing");
}else{
document.write('error');
}
如果条件与条件之间有交叉点的话,不能用else if。else 是除以上条件意外的情况,即补集。
2. if与&&的转换:
1 > 2 && document.write(a);
if(1 > 2) {
document.write(a);
}
3.for循环
for(var i = 0; i <10; i++){
document.write('a');
}
执行顺序:
(例:输出10个a)
var i = 0;
if(i < 10){
document.write('a');
} 条件判断
i++ 条件成立,则执行
if(i < 10){
document.write('a');
} 条件判断
i++ 条件成立,则执行
......
另一写法:
var i = 0;
for(; i < 10; ) {
document.write('a');
i++;
}
再一写法:count用来计数
var i = 1;
var count = 0;
for(; i; ){
document.write('a');
count ++;
if (count == 10 ) {
i = 0;
}
}
又一写法:
var i = 1;
for(; i; ){
document.write('a');
i ++;
if (i == 11 ) {
i = 0;
}
}
4.for循环拓展
(1) 打印0-9的数字:
var i = 1;
for(var i = 0; i < 10; i++){
document.write(i);
}
(2) 求0-9的和:
var i = 1;
var count = 0;
for(var i = 0; i < 10; i++){
count += i;
}
(3) 100以内同时能被3或5整除的数打印出来
var i = 1;
var count = 0;
for(var i = 0; i<100; i++ ){
if(i % 3 == 0 || i % 5 == 0 ){
document.write( i );
}
}
(4)0-100的数字,倒向思维
var i = 100;
for(; i--; ){
document.write(i);
}
5.while循环 for循环只写中间就是while循环 while是for循环的简化版
(1) 打印0-9:
var i = 0;
while(i < 10) {
document.write(i);
i++;
}
(2) while(1){} 无尽循环 never-ending loop
(3) 含7的数及7的倍数
var i = 0;
while(i < 100) {
if(i % 7 ==0 || i % 10 ==7){
document.write(i);
}
i++;
}
(4)do while 循环 不管满不满足条件,都先执行一次 判断成立再执行第二次
do{
document.write('a');
}while