js第一周总结
day1 JavaScript基本语法
一、JavaScript概述
- 什么是JavaScript?
是一门基于对象和事件驱动的客户端脚本语言。 - 哪一年?哪个公司?谁?第一个名字叫什么?
1995年 网景 布兰登 livescript - ECMA提出的第一套W3C标准:
ECMA-262 - js包含哪几部分?
ECMAScript
BOM
DOM
二、如何引入就js?
- 行内脚本(通过事件驱动)
- 内部脚本
<script> </script>
- 外部脚本
<script src = “”> </script>
注:如果是外部引入,那么在script标签中不要写任何妮儿,因为写了也不执行。
三、如何输出?(面试)
- alert():以警告框的形式输出。但是会中断后续语句的执行。通常在排错时使用。
- document.write():输出在页面中,会影响页面布局。
- console.log():在控制台输出。输出对象的详细信息。
四、如何换行?
- 页面中换行 ‘< br >’
- 非页面中换行 \n
注:转义字符 \ :将特殊含义的符号转成普通字符。
\t : 表示横向跳格(一次跳8个空格)
五、注释
- HTML < !-- – >
- CSS / * * /
- JS
单行注释 //
多行注释 / * * /
六、数据类型
基本数据类型:number(数字) string(字符串) Boolean(布尔) null(空) undefined(未定义)
复合数据类型:object(对象)
七、标识符命名规则
- 只能包含:字母、数字、下划线、$
- 不能以数字开头
- 不能是关键字或保留字
- 语义化
- 驼峰命名
(1)大驼峰: HowAreYou (构造函数、类名)
(2)小驼峰:howAreYou (函数名)
how_are_you(变量名) - 匈牙利命名
- 整数:i_num
- 小数:f_num
- 字符串:s_str
- 字符:ch
- 布尔值:bo
- 数组:arr
- 函数:fn
- 对象:o_div
八、变量或常量
- 什么是变量?
在内存中开辟空间,用于存储数据,而随着程序的运行,这个空间的数据会发生变化,所以称为变量。 - 如何声明变量?
(1)显示声明:var 变量名,变量名,变量名;
(2)隐式声明:变量名 = 值; - 如何给变量赋值?
(1)初始化变量值:声明变量的同时给它赋值
(2)先声明,后赋值 - 什么是常量?
3 true false ‘3’
九、运算符与表达式
1. ++ – 递增递减运算符
从左到右,如果先看到变量,则先取出变量中的值参与其它运算,变量中的值再+1或-1。
从左到右,如果先看到运算符,则先将变量中的值+1或-1,再参与其它运算。
2. 算数运算符
* / % -
规则
- 如果是number类型之间的运算,直接运算
- 如果是不同类型数据之间运算,则先转成数字,再运算。(转成功,则直接运算;转失败,转为NaN,运算结果直接是NaN)
- true(转为1) false(转为0) null(转为0)
- undefined NaN 结果一定是NaN(not a number )
注:
-
0除以非0 的数 :0
-
非0的数除以0 : infinity
-
0除以0:NaN
-
0模非0的数 : 0
-
非0的数模0 : NaN
-
0模0 :NaN
+
规则
如果+两边有字符串,就连接成新的字符串
console.log('' + 4 + 4 - 2); //'42'
3.关系运算符
> < >= <=
- 相同类型比较,直接比较
- 字符串比较,从左到右依次比较
- true(1) false(0) null(0)
- undefined(false) NaN(false)
console.log(4 > '3'); //true
console.log(NaN >= NaN) //false
== !== === !==
- == !== :只比较结果,不看类型
- === !== :先比较数据类型,再比较结果
//切记
console.log(null == false); //false
console.log(null == 0); //false
console.log(null == ''); //false
console.log(null == undefined); //true
console.log(null === undefined); //false
console.log(NaN == NaN); //false
4.逻辑运算符
false,0,null,undefined,NaN天然为假
- !: 非真即假,非假即真 。 !“ ” false
- && : 如果&&左边表达式的值为true时,返回右边表达式的值;如果&&左边表达式的值为false时,发生短路,不在执行右边的表达式,直接返回左边表达式的值。(要特别注意,返回的是表达式的值,不一定是true或false)
- || : 如果||左边表达式的值为false时,发生短路,不在执行右边的表达式,直接返回左边表达式的值;如果||左边表达式的值为true时,返回右边表达式的值。
5.三元(三目)运算符
- 一元(单目):!、++、 - - 、 +(正)、-(负)
- 二元(双目):* 、/ 、%、 +(加)、 -(减)&& 、 || 、关系运算符
- 三元(三目):?:
语法:条件?语句:语句
当条件为true时,执行:前面的语句
当条件为false时,执行:后面的语句
扩展
prompt(‘提示性语句’,‘默认值’):弹出一个用户输入的框。
//第二个参数可以省略
6.赋值运算符
- 简单赋值 =
- 复合算数赋值 += 、-= 、*= 、/= 、%=
规则:先取 运算符左边变量中的值 与 运算符右边表达式的值 进行相应的 算术运算,最后将结果赋值给左边的变量。
7.特殊运算符
- new : 用于创建对象
语法:new 构造函数()
var o_num = new number();
var o_obj = new object();
- typeof 用于检测数据类型
typeof后输出的值为字符串类型
console.log(typeof 4);//'unmber'
console.log(typeof '4'); //'string'
console.log(typeof true); //'boolean'
console.log(typeof null); //'object'
console.log(typeof undefined); //'undefined'
console.log(typeof NaN); //'number'
console.log(typeof typeof 3); //'string'
十、内置函数
1.isNaN():判断是否为NaN
console.log(isNaN('8 8'));//true
console.log(isNaN('3.4.2'));//true
console.log(isNaN(0 / 0));//true
console.log(isNaN(3 / 0));//false
2.evel():解析字符串为表达式并返回表达式的结果
3.parseInt(‘字符串’,2-36)
将字符串左边有效的数字部分,转为整数。如果第一个字符是非有效数字,则转NaN
第二个参数是用于限制第一个参数的进制范围。
- 如果省略第二个参数或第二个参数为0时,表示十进制
- 如果第二个参数是小于2或者大于36,结果为NaN
- 如果第一个参数不符合第二个参数的进制范围,结果为NaN
<script>
console.log(parseInt("5 5")); //5
console.log(parseInt("3.256"));//3
console.log(parseInt("3a"));//3
console.log(parseInt("a3"));//NaN
console.log(parseInt("0x56"));//86 //0x :表示十六进制数
console.log(parseInt("3",2));//NaN
console.log(parseInt("3a",1));//NaN
</script>
4.parseFloat(‘字符串’)
将字符串左边有效的数字部分,转为小数。如果第一个字符是非有效数字,则为NaN
console.log(parseFloat('3.4.5')); //3.4
console.log(parseFloat('4 23')); //4
console.log(parseFloat('a34.3')); //NaN
5.number(‘字符串’)
将有效数字字符串转为数字。如果其中有一个非有效数字,则转为NaN
console.log(Number('3.4.5')); //NaN
console.log(Number('3 4')); //NaN
console.log(Number('3a')); //NaN
十一、代码规范
- 运算符两边加一个空格
- 语句结束加分号
- 如果在{}中,缩进一个tab
- 小括号嵌套,加空格( () )
day2 逻辑分支
一、程序控制的三大结构
- 顺序结构
从上到下,从左到右依次执行每一条语句,不允许跳过任何一条语句。 - 选择结构
根据条件判断,执行某一段代码 - 循环结构
满足一定条件。重复执行一段代码
二、实现选择结构的语句有哪些?
- ?:
- if
- switch
if
单分支选择
if(条件){
语句组;
}
双分支
if(条件){
语句组;
}else{
语句组;
}
多分支
if(条件){
语句组;
}else if(条件){
语句组;
}else if{
语句组;
}
...
else if(条件){
语句组;
}else{
语句组;
}
switch
switch(表达式){
case 表达式 : 语句组;[break];
case 表达式 : 语句组;[break];
case 表达式 : 语句组;[break];
...
case 表达式 : 语句组;[break];
default : 语句组;
}
规则:先计算switch后表达式的值,该值如果与某个case后表达式的值一致,则执行该case后的语句组,如果后面有break,则退出switch语句。如果没有break,则继续执行后面所有的语句组,知道遇到break或右大括号结束。
day3 循环结构
一、循环结构
满足某一条件,重复执行某一段代码。
二、循环思想(循环三要素)
- 从哪里开始
- 到哪里结束
- 步长(步进)
三、实现循环的语句?
- while
- do while
- for
四、语法
while:当型循环
循环初值;
while(循环条件){
语句组;
步长;
}
do while:直到型循环
循环初值;
do{
语句组;
步长;
}while(循环条件);
for:多功能循环
for(循环初值;循环条件;步长){
语句组;
}
五、额外的格式
循环初值;
for(;循环条件;步长){
语句组;
}
循环初值;
for(;循环条件;){
语句组;
步长;
}
六、无限循环(死循环):条件永远为真
while(1){}
do{} while(1);
for(;1;){}
七、循环之间的区别
1.while
- 当型循环,先判断条件,后执行语句
- 第一次条件为false是,一次都不执行
- 当循环次数不确定时,建议使用
2.do while
- 直到型循环,先执行语句,后判断条件
- 第一次条件为false时,至少执行一次。
- 当循环次数不确定时,建议使用
3.for
- 当型循环,先判断条件,后执行语句
- 是哪个第一次条件为false时,一次都不执行
- 当循环次数确定时,建议使用。
八、break continue
break
- 用于switch语句中,跳出switch语句
- 用于循环语句中,跳出当前循环
continue
用于循环语句,跳出本次循环,提前进入下一次循环。
day4 函数(上)
一、什么是函数
反复使用 功能代码 封装
二、好处
- 程序可控
- 一次封装,多次使用(复用)
- 随处可调
三、函数的分类
- 内置(库、系统)函数
- 自定义函数
四、函数的类型
function
五、函数的声明
- 语句定义法:任意位置都可调用
function 函数名([参数]){
//实现的功能代码
}
- 表达式定义法:只能先声明,后调用
var 函数名 = function([参数]){
//实现的功能代码
}
六、调用函数
- 一般调用:函数名([参数])
- 事件调用
七、函数的参数
- 实际参数(实参):调用函数时使用的参数,可以包括常量、变量、表达式
- 形式参数(形参):定义函数时使用的参数,只能是变量。
注:
当实参数量多于形参数量时,多于的实参忽略
当实参数量少于形参数量时,多于的形参值为undefined
八、函数的返回值
return:
- 将函数的处理结果返回到调用该函数的地方
- 退出函数
九、事件相关概念
o_div.onclick = function(){
console.log('我点击了鼠标');
}
/*
o_div:事件监听的对象
click:点击事件(名词)
onclick:事件驱动
function(){}事件处理程序
*/
/*
绑定事件的语法
对象.事件驱动 = 事件处理程序
*/
onload : 加载事件
表单
onfocus : 得焦事件
onblur : 失焦事件
onchange : 改变事件
鼠标
onclick :点击事件
ondblclick : 双击事件
onmousedown : 鼠标按下事件
onmouseup : 鼠标弹起事件
onmouseover : 鼠标移入事件
onmouseout : 鼠标移出事件
onmouseenter : 鼠标移入事件
onmouseleave : 鼠标移出事件
onmousemove : 鼠标移动事件
键盘
onkeydown : 键盘按下事件
onkeyup : 键盘弹起事件
onkeypress : 键盘按过事件
day5 函数(下)
一、递归
自己调用自己
递归的本质:循环(初始值,条件,步长)
二、如何创建对象?
- 字面量的方式
{key:value,key:value}
当只需要一个对象的时候使用 - new 内置构造函数()
new object(); - new 自定义构造函数()
new 函数名();
批量创建对象时使用
构造函数语法
function 函数名([参数]){
this.属性 = 值;
this.方法 = function(){
...
}
}
三、如何访问对象中的属性和方法
- 对象.属性 对象.方法
- 对象[‘属性’] 对象’方法’