js组成部分:
1、ECMAscript 核心语法
2、DOM
3、BOM
js书写方式:
1、行内
2、外联 、在head标签或在body标签中使用script标签,
优点:彻底和html分离,便于后期维护
js输出内容方式:
1、alert
2、document.write
3、prompt
4、console.log
注释: 单行注释// 多行注释 /**/
代码的执行顺序:
从左到右、从上到下
数据类型
number 数值
String 单引号、双引号 字符串和任何相加时都是字符串
unll 空
undefined 用var创建变量没有赋值时会出现undefined
boolean true flase
引用数据类型:
数组 -Array
日期 - Date
对象 - Object
转义符:
'把单引号变成普通字符
"把双引号变成普通字符
字符串 拼接符(连接符) +
调试:
步骤一:在谷歌浏览器中鼠标右键,选择检查,打开开发者面板,选中soruces项,打开并显示我们的源代码
步骤二:在指定js代码处对应的行号单击设置断点
步骤三:刷新点击下一步手动控制代码的执行过程。
变量
var
cons
let
变量的命名规范:规则:(法律)
变量名可以由数字、字母、下划线_、$符组成、到不能艺术字开头
不能使用关键字或保留字当作变量名。
变量名区分大小
规范(道德)
驼峰命名法,变量名若由多个单词组成,第一个单词首字母要小写,后面其它首字母要大写
检测:typeOf、indexOf
运算符
加+、减-、乘*、除/、取余%
赋值 =、等于==、全等===
加等于+=、减等于-=、*=、/=、
%=、<、>、<=、>=、不全等!==
运算符的优先级:
1. () 小括号
2. ++、--、! 一元运算符
3. +、-、、/、% 算术运算符 先乘除取余数再加减
4. >、 <、 >=、 <=、 ==、 !=、 ===、 !==、 比较运算符(关系运算符)
5. &&、 || 逻辑运算符, 先&&后||
6. =、 +=、-=、=、/=、%=
==和===区别:等于是比较值,全等是比较的值和类型
转义符
拼接 +
表示方式 十进制 、 小数、NAN、isNAN(检测)
一元运算符:
运算符仅仅运算一种数据【自增、自减、取反】
二元运算符:
运算符可以运算两种数据【算术、比较、逻辑】
逻辑运算符:
且运算$$ 规则:两边条件都符合时候(true),最终结果就是true,否则是false
或运算|| 规则:连边条件符合一个就是true、两边都不符合就是false
取反! 规则:就是取反
返回布尔值
自增
自减
var a = 10;
var sum = ++a + a++;
// a = a+1; a=11;
// sum = 11+a++
// sum = 11 + 11;//22
// a= a + 1; a = 12
数据类型转换
转字符串 string() undefinde和null 不能调用string
转数字 Number()
隐式转换:
string:任何数据和字符串相加都会自动转换为string类型
Number:任何数据在做算术运算时(除了和字符串相加外),或任何数据在
在和数据比较时,其他运算都会自动转换Number
NAN:任何数据和NaN做算术运算时,都是NaN, NaN==NaN(false)
boolean:- 在取反运算时,其他数据会自动转换为布尔值
在分支结构或循环结构的条件判断中,其他数据会自动转换成布尔值(后续演示...)
顺序结构:
从左到右,从上到下
分支结构:
if、else 、else if else
switch case: break; default
三元表达式:hours = hours<10?'0'+hour:hour;
循环结构
while() do()while() for()
强制转换字符串:
方式1 tostring()
undefined 和null不能调用toString()
方式2 string();
强制转数字:
字符串数值转数字
方式1 Number('')
非字符串数字转数字
方式2 Number('abc') //NaN
布尔值转数字
Number(true) //1
Number(false) //0
Undefined和NULL转数字
Number(undefined) //NaN
Number(null) //0
转换布尔值:
方式:Boolean(其他数据)
console.log( Boolean('') );
console.log( Boolean(0) );
console.log( Boolean(undefined) );
console.log( Boolean(NaN) );
console.log( Boolean(null) );
转为整数:只显示整数 若前面是数值,后面是字母,那么只会提取前面的数值
parseInt
转为小数:会显示小数
parseFloat ()
任何数据和字符串[相加]都会自动转换为String类型。
var age = '5' + 100; // '5' + '100'
console.log(age);
隐式转换 ---- 会 布尔值 取反 或 $$
while(条件表达式) 和for循环很相似:1、先定义变量、2、条件、3、count++
先满足条件在执行
count++
do-while{}(条件表达式)
不管条件是否满足,至少执行一次
for
针对循环次数确定时,可以用for循环;
break
由于它是用来退出循环或者swicth语句,所以只有它出现这些语句,这种形式break语句才是合法的。
是立即结束语句,并从头执行该语句
continue
continue语句只能用在while语句、do/while语句、for语句或者for/in语句的循环
体内的,在其它地方都会报错
结束当前循环,进入下个循环
循环结构
for、while、do while
解决循环,for死循环,次确定时候用for循环,加加也可以减减的
关键字:
break 跳出整个循环
continue 跳出这个给循环,循环下次循环
数组:
索引是有序的、从0开始
数组长度:
是从1开始的
创建:
var arr = new Array();
var arr = []
规范:
可以传任何数据
操作数组:
根据数组中的某一个位置获取数据 数组名【索引】length
遍历数组:
可以通过for循环
获取长度
数组名.length
修改数组指定的元素:
数组名[下标] = 值;//修改
清空数组:
数组名.length= 0;//清空数组
数组最后追加新元素:
数组名[数组中.lrngth-1] = 值;//添加最后一个元素
函数创建
创建 function num(形参数){}
调用 num()
// 问题:针对按需使用的程序,在使用的地方每次都复制源代码,造成代码
形参:创建的函数形参
实参和形参是一一对应的,函数名是顾名思义的。
实参是调用里的就是实参
返回值
return关键字是配合函数的使用的
数组总结
冒泡排序 笔试题 手写----过程 就是重复的【比较相邻的数字】
规律:比较多少趟数
内层循环比较多少次 数组名。length-1
找到两个相邻的两个位置
return 数据
函数体内没有返回值 :就会返回undefined
})(实参)//这是调用
// 让匿名函数和''运算符''配合使用
// "("function(){"}"
// (function()()调用{})//这个用的多一点
// !function(){}//运算符!语法不报错,这就是匿名函数
// -function(){}//运算符- 语法不报错,这就是匿名函数
(function fn(){})
匿名函数
(function(){
console.log(1)
console.log(1)
console.log(1)
})();//小括号就是调用了,只能用一次
// 自调用-创建好函数,马上执行
arguments 伪数组----只能在函数体内使用
可以获取用户传入的所有实参
操作时,可以像数组一样
针对用户传入的实参个数不确定时可以选用arguments,其它情况依然要写参数
创建对象:
var arr = new Object{}
var arr = {}
创建对象
之前必须得先有模板(构造函数)
昨天作业总结:
阶乘:
需求:写一个函数,并返回值,(如:3的阶乘,1x2x3);
功能:实现阶乘
参数:
num表示是一个数组number
返回值:返回一个数字 (返回的结果是阶乘的结果)
注意:未来不要在函数中处理结果,因为结果是要交给使用者的,使用者根据自己需求处理结果
质数:不懂
简单计算机:
用函数封装:实现加减乘除的效果
参数:
数值1,数值2,数值三(代表运算符)
技术用swicth写的
返回值
回调函数
作用域:
全局变量:全局变量就是在函数外定义的var变量就是去全局变量
局部变量:就是函数体内的var定义的变量以及参数都是局部变量
作用域链:一个函数嵌套另一个函数:找本身的的变量,如果找不到就去上一级去找,这就形成了作用域链
预解析:提升变量、函数提升
变量提升,提升到当前作用域
函数提升,提升到当前作用域
构造函数创建方式:
var arr = new Object();
var arr = {};
创建数组
var arr = Array()
var arr = []
函数表达式
var fn = function(){}
函数声明
function fn(){}
创建对象
var arr = Object();
var arr = {}
匿名函数
(function fn(){})
自定义构造函数:
复习
函数进阶
作用域
全局作用域 函数外部定义的var关键字就是全局作用域,函数体外执行环境
局部作用域 函数体内的执行环境
作用域链 先从本身,如没有去上级查找,就形成了作用域链
与解析
提升变量var 仅仅提成的变量名 函数声明整体会提升
函数创建方式
函数表达式
var 变量名 = function(){}
类型function就是函数的类型
匿名函数和自执行函数
(function fn(){}())
就是自调用、后面哪个括号就是调用
arguments
在js中不用写形参,像数组一样获取每一个下标,伪数组
对象基础:
属性和方法组成的
属性:静态 男
方法:动态 会吃、会跑
【创建对象】:
构造函数:1、系统给的 2、自定义的
系统提供的构造函数:Object
创建方式1
var wc = new Object()
创建方式2 经常用
var wc = {}
添加属性:
语法1:对象名.key = value
语法2:对象名['kay'] = value
获取:
对象名:key
对象名['kay']
调用方法:
对象名.方法名()
添加属性:
name:'旺财',.....
删除
delete 对象名.值
检测对象的成员是否存在
语法:对象名.hasOwnProperty('age')
返回:存在true 不存在false
检测一个对象是否某个类型
对象名 instanceof 构造函数名
是的true 不是false
遍历:
数组:可以通过for循环遍历,因为有索引,而且是有序的索引
数组:一组有序的数据集合。
对象:一组无序的数据集合。
遍历对象: for-in
在变量的过程中,key表示对象中某一个键名(属性名或方法名)是一个变量,所以在使用时使用中括号的方式访问。
注意:遍历中不要使用点的方式获取键所对应的值。
for(var key in lb) {
console.log(lb[key])
}
构造函数
object Array function
创建一个自定义构造函数
1、创建对象 function num(){}
2、this.属性=值;
3、var r = new 对象名(值);
new1和new2比较的是内存地址 那么就等于false
注意:自定义构造函数对象首字母是大写,调用的时候用new的方式
new关键字的执行过程
1、向内存中申请一块空间,将要创建的对象
2、this关键字指向当前创建的对象(指向内存申请的这一块空间)
3、通过this向内存中的空间添加属性与方法
4、外部变量会接受所创建好的对象
相同:都是函数
不同点:
1、规范:普通函数命名要符合( 驼峰命名法);调用:直接调用
2、规范:构造函数命名法要符合,帕斯卡命名法(对象名首字母大写)调用:通过new的方式调用
03基本数据类型和引用数据类型区别【理解】
1、栈和堆
2、基本数据类型 和 引用数据类型作为函数传参时
内置对象:
系统所提供的对象如:Object、Array、Math、Date等等
宿主对象:js所运行环境的对象比如:Bom中的window、Dom中的document
自定义对象:自定义构造函数所创建的对象
内置对象--Math
console.log(Math)
// 属性
console.log(Math.PI);
// 方法 绝对值
var r = Math.abs(-100);
// console.log(r)
// 四舍五入
var r = Math.round(100.1)
console.log(r);
// 向上取整
var r = Math.ceil(100.1);
console.log(r)
// 向下取整
var r = Math.floor(100.9999);
console.log(r);
// 最大数
var r = Math.max(1,7,2,54,9,4);
console.log(r)
// 最小数
var r = Math.min(824,4,57586,2);
console.log(r);
内置对象--Date
02操作对象
1、获取和设置属性与方法
2、删除对象的成员
3、检测对象成员
4、遍历对象成员
5、检测对象函数创建对象
5、new关键字和普通函数的区别
this方法指向
的是调用者
日期对象-date
3.2 Math对象常用属性和方法
- Math.abs(数字); 获取一个数字的绝对值
- Math.round(数字); 四舍五入
- Math.PI; π
- Math.ceil(数字); 向上取整
- Math.floor(数字); 向下取整
- Math.random(); 随机数[0,1);
- Math.max(数字,数字,数字...); 求最大数
- Math.min(数字,数字,数字...); 求最小数
// gat 获取
创建一个日期对象
var date = new Date()
// 获取
var year = date.getFullYear() //获取年份
var month = date.getMonth() //获取月份 是从0到11月份
var day = date.getDate() //获取日期
var hours = date.getHours() //获取小时
var Minutes = date.getMinutes() //获取分钟
var Seconds = date.getSeconds() //获取 秒
var Milliseconds = date.getMilliseconds() //获取毫秒
var d = date.getDay()//获取星期数
var time = date.getTime();//获取总毫秒//获取从1970到某一个时间点额时间戳
document.write(time);
// document.write(date)
设置 set
内置对象---数组对象
unshift 数组前面添加
shift 数组前面删除
push 数组后面添加
pop 数组后面删除
数组任意位置添加和删除 删除 修改 添加
splice()
1、在第几个位置
2、在删除几个
3、添加数据
检测一个数据在数组中的位置 indexOf()
返回数据类型:number、string、undefiend、unll、Boolean、object
返回-1 表示不存在
indexOf('aa',1);第一个之后查找aa
反转
reverse()反转
排序
sort
要用匿名函数,规则
截取
arr.slice
var j = arr.slice(1,3); //包括1不包括3,也就是截取第一个和第二个
拼接
arr.join('传参')
默认用 '逗号' 拼接
\n 表示换行 \t tab键缩进
数组遍历
1、数组名.forEach(function(value,index,currentArray){
console.log(value);
});
2、过滤出符合筛选条件的元素,返回一个新的数组
数组名.filter(function(value,index,currentArray){
return 条件; // 如:return value >= 1000;
});
3、// 验证数组中的每一个元素是否都符合指定的条件,返回布尔值
数组名.every(function(value,index,currentArray){
return 条件; // 如:return value >= 1000;
});
4、// 验证数组中的元素,是否有符合指定条件的,返回布尔值
数组名.some(function(value,index,currentArray){
return 条件; // 如:return value >= 1000;
});
5、// 遍历数组中的每一个元素,更改后存入一个新的数组中,返回一个新的数组
数组名.map(function(value,index,currentArray){
return 操作; // 如:return value * 2;
});
清空数组的方法:
举栗:
var arr = [11,44,22,66];
方式1
arr = [ ]
方式2
arr.length = 0;
方式3
arr.splice(0,arr.length)
string字符串的不可变性【了解】
var str = 'abc';
str = 'hello';
当重新给str赋值的时候,数据'abc'不会被修改,依然在内存中
重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
由于字符串的不可变,在大量拼接字符串的时候会有效率问题
基本包装对象【了解】
普通字符串
var str = 'abc'; // 普通字符串不是对象
var len = str.length; // 但是为什么可以像对象一样使用点出东西?
alert(len); //3
把字符串包装成对象 → 基本包装类型
var strObj = new String('abc'); // 把字符串包装成对象
var len = strObj.length; // 因为是对象,所以可以点出东西。
alert(len); //3
字符串对象常用的方法
字符串所有的发方法 都 不会修改字符串本身(字符串是不可变性的),
操作完成会 返回一个新的字符串
获取字符串中的单个字符
字符串.charAt()
字符串[ibdex];推荐使用
字符串的拼接和截取
字符串.concat(1,2,3..);
拼接符 + 推荐使用
截取:字符串.slice(start,end);
查询字符串是否在字符串中存在
字符串.indexOf();
字符串.lastIndexOf()
字母字符大小写转换
字符串.toUpperCase() //转换大写
字符串.toLowerCase()//转换小写
字符串替换:
字符串.replace(oldStr,newStr); 默认仅仅修改一次
字符串分割:
字符串.split();