1 CSS实现垂直水平居中
HTML结构:
<div class="wrapper">
<div class="content"></div>
</div>
CSS:
.wrapper{position:relative;} .content{ background-color:#6699FF; 200px; height:200px; position: absolute; //父元素需要相对定位 top: 50%; left: 50%; margin-top:-100px ; //二分之一的height,width margin-left: -100px; }
2 简述同步和异步的区别
同步是阻塞模式,异步是非阻塞模式 .
同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;
异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
3 Javascript 部分
javascript的简史
1995年的时候,有网景公司开发,当时名字叫LiveScript,为了搭Java的顺风车,改名为javascript
与此同时,微软因此在自身的浏览器里,也推出了自己的脚本语言jscript
1997年的时候,由ECMA出面,推出了一套javascript的规范,提出js由三部分组成
ECMAScript
基础语法
DOM
文档对象模型
BOM
浏览器对象模型
2003年之前,网易界面上的弹窗广告几乎都是由js做的,被人称作牛皮藓
2004年的时候,JS的命运发生改变,
2007年的时候,苹果公司推出的手机,可以用来上网
2010年的时候,H5的出现,canvas又推高了js的地位
2011年的时候,node.js将js语言伸向后服务器端
js语言特性
是世界上使用最多的脚本语言
弱类型语言
动态语言
客户端的脚本语言
js书写位置
链接式
<script src=".js"> </script>
嵌入式
<script></script>
数据类型
基本数据类型
number
string
boolean
null
undefined
复杂数据类型
Date
object
Array
function
变量
变量赋值
var i=number;
var i=“string”;
命名规则
变量的命名一定要有意义
以字母(a-z大小写字母 ),"_"或$开头,绝对不能以数字开头,可以包括字母,数字,下划线,$,严格区分大小写,绝对不能使用系统中的关键字或是保留字
推荐使用驼峰命名法:如userName,hightSchool
+运算符的作用
字符串之间 ,起连接作用
数字之间,起运算作用
Typeof关键字
string
number
运算符
算术运算符
一元运算符
++ --
二元运算符
+ - * / %
关系运算符
比较运算符
> < >= <=
相等运算符
== != === !==
逻辑运算符
&& || !
运算符的优先级
数字(算术运算符)>关系运算>逻辑运算符>赋值运算符
复合赋值运算符
将数学运算符和赋值运算符合起来一块写了
数据类型的转换
转number
隐式
+ - * / %
显示
parseInt()
Number()
parseFloat()
转string
隐式
+“”
显式
.toString()
String()
转boolean类型
隐式
!!
显式
Boolean()
语言结构
顺序结构
分支结构
if
只能判断 一种情况
if(判断条件){
要执行的代码
}
if else-if
判断两种情况
选择结构
三元表达式
表达式1 ?表达式2 : 表达式3 ;
if - else
switch-case
多种情况的一种
if-else 和 switch-case的区别
相同点
都可实现多分支结构
不同点
if -else if:可以处理区间范围
switch只能用于定值比较
短路运算
&&
转换为boolean类型的值为false的情况
||
转换为boolean类型的值为true的情况
!
循环结构
while
while(循环条件){
循环体(要执行的代码)
}
do while
do{
循环体
} while (循环条件)
for
for (表达式1 ;表达式2 ; 表达式3 ){
循环体;
}
for in
break 和 continue
break
用在switch-case ,用于跳出当前程序
用再循环当中 ,while或者for循环 ,与if搭配使用( 作用:立即跳出当前循环,后面代码都不执行)
continue
只结束当前本次循环
数组
使用构造函数创建数组
var arr = new Array ();
arr[]=0;
使用字面量方式创建数组
var arr =[ 1,2,3,4,5,6,7];
for ( var i=0;i<arr.length; i++){
console.log(arr[i]);
}
函数
定义:
使用函数声明的方式定义
组成
function 函数名( 参数 ) {
函数体( 可执行的代码 ) ;
}
函数名
参数
返回值
形参和实参
在函数定义的时候,使用的参数叫做形参,起占位置的作用
在函数真正的调用的时候,传入的数据,才是实参
函数表达方式
声明函数
function 函数名(){
要执行的代码;
}
匿名函数
var fun =function (){
要执行的代码;
}
区别
1.函数的声明中的函数有名字
2.函数表达式中的函数没有名字,是匿名函数,前面的变量的名字可以看做是函数的名字
3 在函数预解析的时候,会先将函数声明提前到作用域的最前面,而函数表达式不会提升
4 函数声明中的函数,可以在声明之前调用,但是函数表达式的函数必须在函数表达式之后调用
return
函数中无return
默认返回值:undefined
函数中有return
return后面没有数据
返回值是:undefined
return后面有数据
该数据是返回值
函数的嵌套
定义:在一个函数里,调用另一个函数
四种形式
无参无返回值
仅仅是代码的复用(用处比较多)
无参有返回值
仅仅是函数的调用, 没有输出语句
有参无返回值
只要没有return关键返回的数据,就没有真正的返回值,仅有默认的返回值undefined
有参有返回值
(实际用处最多)
重载
定义:函数名相同,但是函数的形参个数不同,或者形参的数据类型不同,这样就构成了函数的重载
注意 : JS中没有函数的重载,如果JS中有重名的函数,后面的函数会将前面的函数覆盖掉
变量的作用域
全局作用域
同一个1.5.1页面中的script标签之间的区域
全局作用域内的变量就是全局变量,在全局作用域内定义的变量是全局变量,可以在页面的任何地方访问的到(包括函数内部)
在函数内部不使用var定义的变量,也是全局变量
局部作用域
函数内部就是局部作用域
一个函数就是一个局部作用域,局部作用域 内的变量称为局部变量
特殊函数
自执行函数
两种方式
(function(){
return a;
}() );
(function(){
return a;
}) () ;
过程:
自执行函数是没有名字的,定义了之后马上调用. 这种函数多用于一次性使用的时候 , 避免了函数名的冲突
回调函数
就是将函数做为参数进行传递
var a=10;
var fun(a){
return a+b;
}
var f2=function(a,ff){
return ff(a);
}
console.log(f2(a,fun));
内置对象
Math对象
Math.pow(a,b) a的 b 次方幂
Math.round(a) 四舍五入
Math.ceil(a) 向上取整
Math.floor(a) 向下取整
Math.PI() 圆周率
Math.abs() 绝对值
Math.sqrt(a) num开平方
Math.sin()
Math.cos()
Array对象
既可以作用于数组,
又可以作用于字符串
arr.valueOf 打印对象本身
arr.indexof() 从前面寻找该项,(后面有也不再找),得到该项的位置
arr.lastindexof() 从后面寻找该项,(前面有也不再找),得到该项的位置
slice ( a, b ) 截取数组(字符串)中的元素组成一个新数组(字符串)返回,原数组(字符串)不变 ,a 为索引
一个参数
从当前位置截取到最后
两个参数 b值取不到
b 值为正
从前数索引位置
b值为负
从后开始数的索引位置
arr.concat 连接两个数组或字符串
作用于数组
arr.toString 转换成字符串,且用","分割
arr.join() 数组转换成字符串
arr.unshift() 向数组前追加元素,得到数组长度
arr.shift() 删除数组第一项,得到删除数据
arr.push() 向数组后追加元素,得到数组长度
arr.pop() 删除数组最后一项,得到删除数据
arr.reverse() 翻转数组
arr.filter() 过滤 返回true的留下,返回false 过滤掉
arr.forEach() 循环遍历数组的每一项,可以遍历输出数组中的每一项及每一项的索引
splice ( a, b) 截取(删除):会改变原数组
两个参数 删除
a : 将要删除的元素
b : 需要删除的个数
三个参数 替换
a : 将要删除的元素
b : 需要删除的个数
c : 删除后 取代添加的元素
作用于字符串
arr.split() 将字符串中的字符以某种字符 分割成数组中的元素 可以将字符串转换成数组
arr.substring( a,b ) 截取字符串中的元素组成一个新字符串返回,原字符串不变 ,a 为索引
一个参数
从当前位置截取到最后
两个参数 b值取不到
b 值为正
从前数索引位置
b值为负
从后开始数的索引位置
arr.substr( a,b ) 截取字符串中的元素组成一个新字符串返回,原字符串不变 ,a 为索引
一个参数
从当前位置截取到最后
两个参数
b值为长度
特殊用法
str.substr(-2); //传入负数,相当于传入length + (-2) 倒着截取
str.substr(2,-3); //第二个参数,如果传入负数相当于0 截取不到,为空
chatAt ( a ) 获取字符串中指定索引位置
charCodeAt () 获取字符串中指定索引位置的字符的ASCII码值
转换大小写
大写
arr.toUpperCase ( )
arr.toLocaleUpperCase ( )
小写
arr.toLowerCase ( )
arr.toLocaleLowerCase ( )
arr.trim ( ) 去除字符串前后的空格
arr.replace ( ) 替换字符串里面字符
arr.replace ( "a" ," w" ) 替换字符串里面字符
arr.replace ( /a/g ," w" ) 正则方式的全部替换
字符串 string
属性:length 是可以将字符串看成字符的数组
清空数组的三种方式
从0截取,截取整个数组
让数组的长度变为0
给数组重新赋值,使其为空数组
JS基础入门
javascript的简史
1995年的时候,有网景公司开发,当时名字叫LiveScript,为了搭Java的顺风车,改名为javascript
与此同时,微软因此在自身的浏览器里,也推出了自己的脚本语言jscript
1997年的时候,由ECMA出面,推出了一套javascript的规范,提出js由三部分组成
ECMAScript
基础语法
DOM
文档对象模型
BOM
浏览器对象模型
2003年之前,网易界面上的弹窗广告几乎都是由js做的,被人称作牛皮藓
2004年的时候,JS的命运发生改变,
2007年的时候,苹果公司推出的手机,可以用来上网
2010年的时候,H5的出现,canvas又推高了js的地位
2011年的时候,node.js将js语言伸向后服务器端
js语言特性
是世界上使用最多的脚本语言
弱类型语言
动态语言
客户端的脚本语言
js书写位置
链接式
<script src=".js"> </script>
嵌入式
<script></script>
数据类型
基本数据类型
number
string
boolean
null
undefined
复杂数据类型
Date
object
Array
function
变量
变量赋值
var i=number;
var i=“string”;
命名规则
变量的命名一定要有意义
以字母(a-z大小写字母 ),"_"或$开头,绝对不能以数字开头,可以包括字母,数字,下划线,$,严格区分大小写,绝对不能使用系统中的关键字或是保留字
推荐使用驼峰命名法:如userName,hightSchool
+运算符的作用
字符串之间 ,起连接作用
数字之间,起运算作用
Typeof关键字
string
number
运算符
算术运算符
一元运算符
++ --
二元运算符
+ - * / %
关系运算符
比较运算符
> < >= <=
相等运算符
== != === !==
逻辑运算符
&& || !
运算符的优先级
数字(算术运算符)>关系运算>逻辑运算符>赋值运算符
复合赋值运算符
将数学运算符和赋值运算符合起来一块写了
数据类型的转换
转number
隐式
+ - * / %
显示
parseInt()
Number()
parseFloat()
转string
隐式
+“”
显式
.toString()
String()
转boolean类型
隐式
!!
显式
Boolean()
语言结构
顺序结构
分支结构
if
只能判断 一种情况
if(判断条件){
要执行的代码
}
if else-if
判断两种情况
选择结构
三元表达式
表达式1 ?表达式2 : 表达式3 ;
if - else
switch-case
多种情况的一种
if-else 和 switch-case的区别
相同点
都可实现多分支结构
不同点
if -else if:可以处理区间范围
switch只能用于定值比较
短路运算
&&
转换为boolean类型的值为false的情况
||
转换为boolean类型的值为true的情况
!
循环结构
while
while(循环条件){
循环体(要执行的代码)
}
do while
do{
循环体
} while (循环条件)
for
for (表达式1 ;表达式2 ; 表达式3 ){
循环体;
}
for in
break 和 continue
break
用在switch-case ,用于跳出当前程序
用再循环当中 ,while或者for循环 ,与if搭配使用( 作用:立即跳出当前循环,后面代码都不执行)
continue
只结束当前本次循环
数组
使用构造函数创建数组
var arr = new Array ();
arr[]=0;
使用字面量方式创建数组
var arr =[ 1,2,3,4,5,6,7];
for ( var i=0;i<arr.length; i++){
console.log(arr[i]);
}
函数
定义:
使用函数声明的方式定义
组成
function 函数名( 参数 ) {
函数体( 可执行的代码 ) ;
}
函数名
参数
返回值
形参和实参
在函数定义的时候,使用的参数叫做形参,起占位置的作用
在函数真正的调用的时候,传入的数据,才是实参
函数表达方式
声明函数
function 函数名(){
要执行的代码;
}
匿名函数
var fun =function (){
要执行的代码;
}
区别
1.函数的声明中的函数有名字
2.函数表达式中的函数没有名字,是匿名函数,前面的变量的名字可以看做是函数的名字
3 在函数预解析的时候,会先将函数声明提前到作用域的最前面,而函数表达式不会提升
4 函数声明中的函数,可以在声明之前调用,但是函数表达式的函数必须在函数表达式之后调用
return
函数中无return
默认返回值:undefined
函数中有return
return后面没有数据
返回值是:undefined
return后面有数据
该数据是返回值
函数的嵌套
定义:在一个函数里,调用另一个函数
四种形式
无参无返回值
仅仅是代码的复用(用处比较多)
无参有返回值
仅仅是函数的调用, 没有输出语句
有参无返回值
只要没有return关键返回的数据,就没有真正的返回值,仅有默认的返回值undefined
有参有返回值
(实际用处最多)
重载
定义:函数名相同,但是函数的形参个数不同,或者形参的数据类型不同,这样就构成了函数的重载
注意 : JS中没有函数的重载,如果JS中有重名的函数,后面的函数会将前面的函数覆盖掉
变量的作用域
全局作用域
同一个1.5.1页面中的script标签之间的区域
全局作用域内的变量就是全局变量,在全局作用域内定义的变量是全局变量,可以在页面的任何地方访问的到(包括函数内部)
在函数内部不使用var定义的变量,也是全局变量
局部作用域
函数内部就是局部作用域
一个函数就是一个局部作用域,局部作用域 内的变量称为局部变量
特殊函数
自执行函数
两种方式
(function(){
return a;
}() );
(function(){
return a;
}) () ;
过程:
自执行函数是没有名字的,定义了之后马上调用. 这种函数多用于一次性使用的时候 , 避免了函数名的冲突
回调函数
就是将函数做为参数进行传递
var a=10;
var fun(a){
return a+b;
}
var f2=function(a,ff){
return ff(a);
}
console.log(f2(a,fun));
内置对象
Math对象
Math.pow(a,b) a的 b 次方幂
Math.round(a) 四舍五入
Math.ceil(a) 向上取整
Math.floor(a) 向下取整
Math.PI() 圆周率
Math.abs() 绝对值
Math.sqrt(a) num开平方
Math.sin()
Math.cos()
Array对象
既可以作用于数组,
又可以作用于字符串
arr.valueOf 打印对象本身
arr.indexof() 从前面寻找该项,(后面有也不再找),得到该项的位置
arr.lastindexof() 从后面寻找该项,(前面有也不再找),得到该项的位置
slice ( a, b ) 截取数组(字符串)中的元素组成一个新数组(字符串)返回,原数组(字符串)不变 ,a 为索引
一个参数
从当前位置截取到最后
两个参数 b值取不到
b 值为正
从前数索引位置
b值为负
从后开始数的索引位置
arr.concat 连接两个数组或字符串
作用于数组
arr.toString 转换成字符串,且用","分割
arr.join() 数组转换成字符串
arr.unshift() 向数组前追加元素,得到数组长度
arr.shift() 删除数组第一项,得到删除数据
arr.push() 向数组后追加元素,得到数组长度
arr.pop() 删除数组最后一项,得到删除数据
arr.reverse() 翻转数组
arr.filter() 过滤 返回true的留下,返回false 过滤掉
arr.forEach() 循环遍历数组的每一项,可以遍历输出数组中的每一项及每一项的索引
splice ( a, b) 截取(删除):会改变原数组
两个参数 删除
a : 将要删除的元素
b : 需要删除的个数
三个参数 替换
a : 将要删除的元素
b : 需要删除的个数
c : 删除后 取代添加的元素
作用于字符串
arr.split() 将字符串中的字符以某种字符 分割成数组中的元素 可以将字符串转换成数组
arr.substring( a,b ) 截取字符串中的元素组成一个新字符串返回,原字符串不变 ,a 为索引
一个参数
从当前位置截取到最后
两个参数 b值取不到
b 值为正
从前数索引位置
b值为负
从后开始数的索引位置
arr.substr( a,b ) 截取字符串中的元素组成一个新字符串返回,原字符串不变 ,a 为索引
一个参数
从当前位置截取到最后
两个参数
b值为长度
特殊用法
str.substr(-2); //传入负数,相当于传入length + (-2) 倒着截取
str.substr(2,-3); //第二个参数,如果传入负数相当于0 截取不到,为空
chatAt ( a ) 获取字符串中指定索引位置
charCodeAt () 获取字符串中指定索引位置的字符的ASCII码值
转换大小写
大写
arr.toUpperCase ( )
arr.toLocaleUpperCase ( )
小写
arr.toLowerCase ( )
arr.toLocaleLowerCase ( )
arr.trim ( ) 去除字符串前后的空格
arr.replace ( ) 替换字符串里面字符
arr.replace ( "a" ," w" ) 替换字符串里面字符
arr.replace ( /a/g ," w" ) 正则方式的全部替换
字符串 string
属性:length 是可以将字符串看成字符的数组
清空数组的三种方式
从0截取,截取整个数组
让数组的长度变为0
给数组重新赋值,使其为空数组
对象
自定义对象
与数学运算相关的封装到了一个Math对象中
与数组操作相关的呢,封装到了Arry数组对象当中
与日期相关的,封装到了Date这个对象当中
组成
属性
方法
创建自定义对象
var student = new Object(); //用构造函数的方式创建了一个空对象
student.name = "张三"; // 属性和变量是一样的,都是用来存储数据的
student.age = 20;
student.sex = "男";
student.sayHi = function(){
console.log("我叫"+student.name+",我今年"+student.age+"岁了,我是"+student.sex+"生");
};
student.sayHi ( ) ;
批量创建对象
创建
function createStudent(name,age,sex){
var student = new Object();// 用构造函数的方式创建了一个空对象并返回
student.name =name;
student.age = age;
student.sex= sex;
student.sayHi= function(){
console.log("我叫"+student.name+",我今年"+student.age+",我是"+student.sex+"生");
};
return student;//将这个对象返回
}
调用执行
var zs = createStudent("张三",25,"男");
zs.sayHi();
this方法构造函数创建对象
this关键字
在JS中,通过构造函数创建出来的对象 ,在调用方法的时候,this指代当前对象
谁调用方法,this指代谁,都是指代当前对象
new关键字
new 关键字来完成
1. 创建一个空对象
2. 将关键字this指向这个空对象
3. 执行构造函数里面的代码,给当前空对象this设置属性和方法
4. 将this这个当前对象返回
执行
创建
function Student(name,sex,age){ //首字母大写,标明是一个函数,但是是构造函数,用来创建对象
//var this = new Object();
this.name = name; // this指代当前创建出来的出来
this.age=age;
this.sex = sex;
this.sayHi = function(){
console.log("我叫"+this.name+",我今年"+this.age+",我是"+this.sex+"生");
};
//return student();
// return this;
}
调用执行
ar ls = new Student("李四","男",25); // 构造函数可以创建对象并返回
ls.sayHi();
对象字面量创建对象
创建
var o = { // 对象字面量
属性 : 值 ,
属性 : 20 ,
函数名 : function () {
console.log( );
}
};
console.log( o["属性"] );
调用
o [ "函数名"]
遍历
for ( var key in o ) {
console.log ( key +"===")+a[key];
}
JSON(javascript对象表示形式)
传输数组的一种数据格式,与对象字面量的区别,就是属性一定要加上 ” ”
DOM(文档对象模型,文档树模型)
Document
获取页面元素的第一种方式 : document.getElementById()
object
model
对象
自定义对象
与数学运算相关的封装到了一个Math对象中
与数组操作相关的呢,封装到了Arry数组对象当中
与日期相关的,封装到了Date这个对象当中
组成
属性
方法
创建自定义对象
var student = new Object(); //用构造函数的方式创建了一个空对象
student.name = "张三"; // 属性和变量是一样的,都是用来存储数据的
student.age = 20;
student.sex = "男";
student.sayHi = function(){
console.log("我叫"+student.name+",我今年"+student.age+"岁了,我是"+student.sex+"生");
};
student.sayHi ( ) ;
批量创建对象
创建
function createStudent(name,age,sex){
var student = new Object();// 用构造函数的方式创建了一个空对象并返回
student.name =name;
student.age = age;
student.sex= sex;
student.sayHi= function(){
console.log("我叫"+student.name+",我今年"+student.age+",我是"+student.sex+"生");
};
return student;//将这个对象返回
}
调用执行
var zs = createStudent("张三",25,"男");
zs.sayHi();
this方法构造函数创建对象
this关键字
在JS中,通过构造函数创建出来的对象 ,在调用方法的时候,this指代当前对象
谁调用方法,this指代谁,都是指代当前对象
new关键字
new 关键字来完成
1. 创建一个空对象
2. 将关键字this指向这个空对象
3. 执行构造函数里面的代码,给当前空对象this设置属性和方法
4. 将this这个当前对象返回
执行
创建
function Student(name,sex,age){ //首字母大写,标明是一个函数,但是是构造函数,用来创建对象
//var this = new Object();
this.name = name; // this指代当前创建出来的出来
this.age=age;
this.sex = sex;
this.sayHi = function(){
console.log("我叫"+this.name+",我今年"+this.age+",我是"+this.sex+"生");
};
//return student();
// return this;
}
调用执行
ar ls = new Student("李四","男",25); // 构造函数可以创建对象并返回
ls.sayHi();
对象字面量创建对象
创建
var o = { // 对象字面量
属性 : 值 ,
属性 : 20 ,
函数名 : function () {
console.log( );
}
};
console.log( o["属性"] );
调用
o [ "函数名"]
遍历
for ( var key in o ) {
console.log ( key +"===")+a[key];
}
JSON(javascript对象表示形式)
传输数组的一种数据格式,与对象字面量的区别,就是属性一定要加上 ” ”
DOM(文档对象模型,文档树模型)
Document
获取页面元素的第一种方式 : document.getElementById()
object
model