这里写自定义目录标题
变量
变量的声明
注意:var a = b = c = 9; 相当于var a = 9; b = 9; c = 9;
var a = 9, b = 9, c = 9;相当于 var a = 9; var b = 9; var c = 9;
数据类型
基本数据类型(简单类型,值类型)
存储的是值本身,因此叫做值类型【主要存放在栈】
- null
- undefined
- boolean
false的几种情况:
1、undefined(未定义,找不到值时出现)
2、null(代表空值)
3、false(布尔值的false,字符串"false"布尔值为true)
4、0(数字0,字符串"0"布尔值为true)
5、NaN(无法计算结果时出现,表示"非数值";但是typeof NaN===“number”)
6、“”(双引号)或’’(单引号) (空字符串,中间有空格时也是true)
- number
- string
引用数据类型(复杂类型)
存储的仅仅是地址。【主要存放在堆】
栈中间存放的是地址
通过new关键字创建对象eg:Object,Array,Date
作用域
- 全局作用域:全局变量
- 局部作用域:局部变量(函数中没有声明的变量也是全局变量,函数内部的形式参数也可以看作是局部变量)
注意:
就近原则:先查找当前作用域,发现没有定义num,往上找发现定义为123,所以答案是123,如果123被注释,则继续往上找就是456,456被注释就是not defined
运算符
优先级
逻辑中断
&& 代码执行顺序从左到右,左边为真 直接以右边值为结果值;
左边为假,右边不执行,直接输出左边值(不管右边是什么,只要左边假右边是式子也不执行了),左右都真输出右边
|| 左边为真,右边不执行,直接输出左边值 左边为假,以右边值为结果值
11&&22//都真 右边 22
11||22// 左真 11
False||11 左假 11
函数
函数的定义
匿名函数
没有函数名的函数
- 字面量方式定义函数(赋值法定义函数),这种函数的调用是要在函数声明语句后,不能在函数前面进行调用!!!
通过 function 关键词进行定义,其后,括号 (),大括号{}。并赋值给一个变量,此时变量名就是函数名
var 变量名 = function (参数1,参数2,…){ 要执行的代码(函数体) };
- 第二种匿名函数:
i. 自调用函数(立即执行函数):常用!
(function (参数1,参数2,…){ 要执行的代码(函数体) })(实参);
【避免定义全局变量的时候被污染】一定要有分号!!分号写在前面也行,因为目的就是隔开函数
(function (形参数1,参数2,…){ 要执行的代码(函数体) }(实参));
ii. 事件发生时被调用:
事件= function (参数1,参数2,…){ 要执行的代码(函数体) }
window.οnlοad=function{alert("jai ");} 页面加载结束后执行该函数
iii. 函数中调用:根据函数的性质,在不同位置添加函数,也是未命名函数
setTimeout(function(){alert("jai ");},3000);
计时器函数(需执行的内容,延迟时间ms),在3秒后执行该函数
函数的返回
- 在函数体中使用return 关键字能将内部的执行结果交给函数外部使用
- 函数内部只能出现1 次 return,并且 return 下一行代码不会再被执行,所以return 后面的数据不要换行写
- return会立即结束当前函数
- 函数可以没有return,这种情况默认返回值为 undefined
数组
创建数组
a) 隐式创建方式:其实就是内部使用实例化函数创建,只是看不见
var arr=[1,2,"xiao",{},[1,2]]
b) 直接实例化,通过构造函数Array()
创建
i. 直接把元素写到括号里面
var arr=new Array(1,2,"xiao",[1,"a"])// 创建一个变量为arr的新建数组
ii. 先创建数组,按下标进行赋值
var arr =new Array();
arr[0]=1; arr[1]=["1",{},1];
iii. 先创建数组,对长度进行初始化,后赋值(数组的长度是可以变化的,所以初始化并不影响)
var arr =new Array(1);
arr[0]=1; arr[1]=["1",{},1];
数据修改:
根据数组下标进行元素重新赋值
数据增加:
a) 根据数组下标,添加新的元素。
b) 利用数组长度进行添加,因为数组长度始终是下标+1,所以相当于添加一次就是新加一个元素,arr(arr.length)=‘lll‘;
c) 数组.push(新增的内容),将一个或者多个添加到末尾
d) 数组.unshift(新增的内容),将一个或者多个添加到顶部
数据删除
a) 数组.pop ( ),删除末尾的一个
b) 数组.shift ( ),删除顶部的一个
c) 数组.splice ( 下标,几个),删除从下标开始的几个元素
数组排序
升序:arr.sort(function(a,b){
return a - b;
})
降序:arr.sort(function(a,b){
return b - a;
})
数据遍历:
a) For循环遍历:注意可以使用全局变量对数组长度提前获取,防止出现重复获取的情况
b) For-in遍历:(专门用来遍历数组和对象的):for (variable in object) 使用下标,在对象中遍历变量。在所有遍历方式中效率最低
variable:在每次迭代时,variable 会被赋值为不同的属性名。
object:非 Symbol 类型的可枚举属性被迭代的对象。
for ( var l in arr){ document.write(arr[l]+“写作业去”+‘
’);}
c) For-of遍历,一般是对于内容直接进行遍历:
for (var v of arr){document.write(v+“写作业去”+‘
’);}
二维数组:
数组里面的数据还是数组。Arr[数组下标][数组下标中对应的元素下标]
Eg: [0][1]:数组的第一个元素,第一个元素中的第2个元素
二维数组的遍历:和一维数组类似。
for(var i=0;i<length;i++){
var yl=arr[i].length;// 获取到数组中元素的长度
for(var j=0;j<yl;j++){
document.write(arr[i][j] ");
} }
冒泡排序
for (var j=1;j<length;j++){
for(var i=0;i<length-j;i++){
if(shu[i]>shu[i+1]){
tmp=shu[i];
shu[i]=shu[i+1];
shu[i+1]=tmp;
}}}
一般开发中使用
数组.sort
升序:arr.sort(function(a,b){
return a - b;
})
降序:arr.sort(function(a,b){
return b - a;
})
对象
内置对象
math
Math.random()
函数返回一个浮点数,伪随机数在范围从0 到小于1,也就是说,从 0(包括 0)往上,但是不包括 1(排除 1)
let ram = Math.floor(Math.random() * 6)//随机生成0-5
data
和Math对象不同的是,Date对象是一个构造函数,要通过new来调用创建日期对象(必须要实例化)
const data=new Data()
new Data()
获取当前时间new Data('2021-2-2 08:30:00')
指定时间toLocaleString()
获取年份时间 格式”2023/5/21 00:01:48“toLocaleDateString()
获取年份 格式”2023/5/21 “- -
toLocaleTimeString()
获取时间 格式”00:01:48“
对象的定义
- 由属性和方法组成
- 属性:属性名:属性值
- 方法:方法名:函数
- 对象的易变性:对对象进行复制,意思是在内存中对同一个对象进行不同的命名,不会再创建一个副本,所以修改复制后的就意味着修改原来的【因为复制的是地址,所以修改是对原来的对象进行操作】
创建对象
1. json模式创建对象,创建对象用{}号;(最主要的形式)
var a={name:"t",
age:23,
weight:"45kg",
skills: function () {
console.log('bark');
console.log('showFilm');
}};
2. 直接实例化,通过new object创建
var a=new Object ();
a.name="t";
a.age=23;
对象的创建还可以使用方法:
Sin:function(){} //方法名:函数
访问需要直接调用该方法
a.sin()//对象名.属性名()
3. 构造函数创建对象 将其封装到一个函数
//构造函数创建对象
function 构造函数名() {
this.属性名 = 属性值;
this.方法名 = function() {}
}
// 调用
new 构造函数名();
案例:
function obb(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
this.still=function(a){
console.log(a)
}
}
let min=new obb('tang',24,"女")//这里的new很重要!!要new才能创建
min.still("造飞机")//对象中的函数,是需要调用创建的
console.log(min)
对象的增删改
删除:
- 使用delete进行删除,是将属性名和属性值都删除掉了
Delete 对象.属性;
添加
- 对象名[“属性名“];
a["name"]=“yyt“;
- 对象名.属性名;(常用)
a.age=12;
修改
- 直接使用访问,修改属性值,对其进行重新赋值;
对象的遍历
for in 【For-in 循环:会对每个属性执行一次,不用单独写属性,for(属性名 in 对象){输出内容}//这里的属性名可以随意设置成其他变量,因为他代表的是所有的属性名】
for(i in a){
document.write("我的",i,"是",a[i],"<br>");//i是变量,不用"",使用引号就变成了访问对应的属性;
}
//在for...in 语法中,对象的属性值需要通过 中括号语法才能取出对象的属性值
调用对象
- 使用对象名.属性名;;
var c =a.age;
- 使用对象名[‘属性名’];
var c =a["name"];//需要找的时候是字符串需要用引号引起来
- 调用对象内的方法:对象名.方法名();
let per = {
speak: function () {
console.log("shuohua");
}
,
eat: function (a) {
console.log(`我吃${a}`);
}
}
per.speak();//shuohua
per.eat("栗子");//我吃栗子