基础
一、基本组成:
-
ESMAScript解释器
-
Dom文档对象模型Document Object Model 操作页面
-
Bom Broswer浏览器操作
二、基本内容
2.1格式
行内式、 内嵌式 、外部js文件
注意:js文件的script标签中间不可以写代码
js里一般使用单引号
(1)标识符:不能为关键字或保留字
(2)关键字:JavaScript关键字是指在JavaScript语言中有特定含义,成为JavaScript语法中一部分的那些字。
(3)保留字:
2.2 变量的使用
- 声明变量 : var age;
- 赋值
- 声明加赋值=变量的初始化 var age=18;多个变量声明:一个var其余用逗号隔开。var a=1,b=2,c=3
4. 交换两个变量值,需要添加一个临时变量
变量类型
2.3数据类型
- 字符串string、number、boolean、object【对象复合型string、number、boolean、undefined由他们组成】、function(方法)、undefined(1、未定义2、为赋值)
- typeof识别什么类型
- NaN不是一个数字
- ==先转化相同类型再比较 ===不转换,直接比较(隐转换)加法不转换类型自动
- 字符串连接规则:字符串+任何类型=新字符串,“+”口诀:数值相加,字符相连
- 字符串拼接加强:字符串和变量拼接,变量不能添加引号(‘aaa’+age+‘岁’)
2.4转换成字符型
数字转换成字符串toString()eg:var str=num.toString()
String()console.log(String(num))
拼接字符串的方法:(num+'')
2.5转换数值型
字符串型转换数值型:parseInt(变量)得整数;parseFloat转成小数
Numeber(变量)
2.6转换为布尔型
boolean()‘’,0,NaN,null,undefined为false,其余为true
2.7算数运算符:
- 不能直接判断浮点数是否相等
- ++a前置运算符先自加后返回值,a++后置运算符先返回值子在自加
- 短路运算
(1)与短路:表达式1为真,返回表达式2 ,后面不执
(2)或短路:1为真返回1
2.8语法:分支,循环
(1)分支结构
- if{}else{}双分支语句
- if{}else if{}else{}多分支语句
- 三元表达式: 条件表达式?表达式1 :表达式2
- switch
(2)循环结构
for(①初始化变量,②条件表达式,④操作表达式){③循环体}循环234
1)while、 do…while
断点调试:浏览器调试台source位置
三、函数
3.1函数的定义
- 声明
function 函数名(){} - 调用函数
函数名()
3.2 函数的实参和形参
- 声明函数时是形参,调用时是实参
- 先执行实参,把实参传入函数形参中执行
- 实参个数=形参个数一致,正常输出;多,取得形参个数;少,返回NaN
3.3 函数的返回值return
- function 函数名(){return 需要返回的值}返回给函数的调用者
- return终止函数
①后面的代码不会被执行,终止函数
②只能返回一个值 - 函数无返回值为undefined
3.4. arguments的使用
argument是JavaScript中的一个关键字,用于指向调调用者传入的所有参数。
- 伪数组展示
- 具有length属性
- 按索引方式存储
- 无数组方法如push()等
用者传入的所有参数。
function example(x){
alert(x); //1
alert(arguments.length); //3
for(var i=0; i<arguments.length; i++){
alert(arguments[i]); //1,2,3
}
}
example(1,2,3);
3.5. 函数可以调用
3.6. 函数声明
①funciton fn()
②var fun=function()匿名函数
作业:
判断用户输入是否为素数,(只能被1和自身整除)弹回值
function isPrimeNum(num){
for (var i = 2; i < num; i++) {
if (num%i==0){
return false;
}
}
return true;
}
var res = isPrimeNum(2);
console.log(res);
冒泡排序
function sort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp;
}
}
}
return arr;
}
var arr1 = sort([5, 4, 6, 8, 9])
console.log(arr1);
//输出年份2月份的天数
function getDay() {
var year = prompt('输入年份')
if (irRunYear(year)) {
alert('当前年份是闰年2月有29天')
} else {
alert('当前年份是平年2月有28天')
}
}
getDay();
//判断是否为闰年
function irRunYear(year) {
var flag = false;
if (year % 4 == 0 && year % 100 == 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
四、作用域
- 代码的名字在某个范围,减少命名冲突
- 全局作用域,局部作用域(函数内部)
- 作用域链(就近原则)
五、预解析
5.1. 预解析
将var,function提升到当前作用域前面
(1)变量提升,变量声明提取到作用域前面,不提升赋值
(2)函数提升,函数声明提升,不调用函数
5.2. 代码执行
从上往下执行
案例:
结果9,9,9
9,9,报错
六、对象
6.1. 对象有属性和方法组成
6.2. 创建对象
- 对象字面量创建:采取键值对
var obj={
uname:‘张三’,
age:18,
sayHi:function(){
console.log{
''};
}
new obj=new.Object();
obj.age='19';
- 构造函数
不需要return就可以返回数
6.3. 使用对象
(1)对象.属性名obj.uname
(2)对象['属性名’]obj[‘age’]
(3)调用方法 对象名.方法名()
注意:
1变量和属性区别
(1)都是存放数据的
(2)变量是单独声明并赋值,使用也是直接写变量名,直接引用;
属性是在对象里面不需要声明使用是必须是对象.属性
2函数和方法同上
6.4. 遍历对象
七、内置对象
7.1基础
- 查阅MDN文档
- Math不是构造函数,可以直接使用,不用new
7.2. 封装自己的数学对象
7.3. Math方法
7.4.Math.random()
随机小数 0<=x<1
随机生成一个数去猜直到猜对
7.5 日期对象
Data()必须new
7.5.1 格式化日期年月日
7.5.2格式化日期时分秒
7.5.3获取日期的总的毫秒形式(时间戳)
7.6数组对象
7.6.1创建数组
7.6.2检测数组
instanceof 运算符 检测是否为数组
isArray()h5新增ie9以上支持
7.6.3添加删除数组
方法名 | 说明 | 返回 |
---|---|---|
push(参数) | 给数组追加新的元素 | 数组的长度 |
pop() | 可删除数组最后一个元素 ,一次只能删除一个 | 删除的元素 |
unshift(参数) | 给数组前添加新的元素 | 新数组的长度 |
shit() | 删除第一个元素,数组长度减一无参数 | 返回第一个元素值 |
7.6.4数组排序
- reverse()翻转数组
- sort()排序
升序方式
var arr1 =[13,4,77,1,7]
arr1.sort(function(a,b) {
return a - b;
);
console.log(arr1);
- 索引方式
indexOf
返回该数组的索引号
找不到元素返回-1 - 数组对象
案例:删除重复元素
核心算法︰我们遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组里面没有出现过,我们就添加否则不添加。
7.6.5数组转换成字符串
方法名 | 说明 | 返回值 |
---|---|---|
concat() | 连接两个或多个数组,不影响原数组 | 返回新数组 |
splice() | 数组截取slice(begin,end) | 返回被截取项目的新数组 |
splice() | 数组删除splice(第几个开始,要删除个数) | 返回被删除项目的新数组,可能会影响原数组 |
7.6.6基本包装类型
- 字符串的不可变性
- 字符串的返回位置
indexOf(‘要查找的字符’,起始位置)
lastIndexOf从后往前查找 - 根据位置返回字符
7.6.7字符串对象
案例∶核心算法
判断一个字符串’abcoefoxyozzopp’中出现次数最多的字符,并统计其次数。
核心算法:利用charAt()遍历这个字符串
把每个字符都存储给对象,如果对象没有该属性,就为1,如果存在了就+1
遍历对象,得到最大值和该字符
小八,
var str = 'abcoefoxyozzopp';
var o = {
};
for (var i = 0; i < str.length; i++) {
var chars = str.charAt(i); // chars是字符串的每一个字符
if (o[chars]) {
// o[ chars]得到的是属性值
o[chars]++;
}