break与continue
-
continue 结束本次循环
-
break 结束整个循环
<script>
// continue 结束本次循环
for(var i = 1;i<=10;i++){
if(i==5){
console.log("第五个水饺掉了");
continue;
}
console.log(i);//
}
//break 结束整个循环
for(var i = 1;i<=10;i++){
if(i==5){
console.log("吃到第五个汤圆的时候 碗里面进了一个苍蝇");
break;
}
console.log(i);
}
</script>
2.4 双重for循环
如果循环体又是一个循环 只有把内侧循环走完,才会继续执行外侧循环
<script>
for (var i = 1; i < 5; i++) {// i = 1 2 3 4
console.log(123)
for (var j = 1; j < 5; j++) {
console.log("i=" + i, "j=" + j)
}
}
/*
外侧循环 i = 1
for(var j = 1;j<5;j++){
console.log("i="+i,"j="+j)
}
j = 1 输出 i=1 j=1
j = 2 输出 i=1 j =2
j = 3 输出 i=1 j=3
j = 4 输出 i=1 j=4
j = 5
i = 2
for(var j = 1;j<5;j++){
console.log("i="+i,"j="+j)
}
j = 1 输出 i=2 j=1
j = 2 输出 i=2 j =2
j = 3 输出 i=2 j=3
j = 4 输出 i=2 j=4
j = 5
i=3
i=4
*/
</script>
-
二维数组
<script>
var arr = [1,"123",true,false,undefined,null];//一维数组
var arr1 = [ //二维数组
["你好吗","我不好","我特别好"],
["嘿嘿","哈哈","嘻嘻","呵呵"],
["妲己","王昭君","安琪拉"]
]
// 获取数组
console.log(arr1[0]);//['你好吗', '我不好', '我特别好']
console.log(arr1[1]);// ["嘿嘿","哈哈","嘻嘻","呵呵"]
console.log(arr1[2]);// ["妲己","王昭君","安琪拉"]
// 获取二维数组的值
console.log(arr1[0][0]);//"你好吗"
console.log(arr1[1][3]);//"呵呵"
</script>
-
双重for循环生成标签
<script>
var arr1 = [
["你好吗", "我不好", "我特别好"],
["嘿嘿", "哈哈", "嘻嘻", "呵呵"],
["妲己", "王昭君", "安琪拉"]
]
//数组名.length
// 1.利用双重for循环数组
for (var i = 0; i < 3; i++) {// i = 0 1 2 arr1[0] arr1[1] arr1[2]
for (var j = 0; j < arr1[i].length; j++) {
console.log(arr1[i][j]);
}
}
/*
i = 0
for(var j = 0;j<3;j++){
console.log(arr1[i][j]);/
}
// j = 0 arr1[0][0] 你好吗
// j = 1 arr1[0][1] 我不好
// j = 2 arr1[0][2] 我特别好
// j = 3
i = 1
for(var j = 0;j<4;j++){
console.log(arr1[i][j]);
}
// j = 0 arr1[1][0] 嘿嘿
// j = 1 arr1[1][1] 哈哈
// j = 2 arr1[1][2] 嘻嘻
// j = 3 arr1[1][3] 呵呵
// j = 4
i = 2
*/
//2利用双重for循环数组
var list = document.getElementsByClassName("list")[0];
for (var i = 0; i < arr1.length; i++) {
for (var j = 0; j < arr1[i].length; j++) {
list.innerHTML += "<li>" + arr1[i][j] + "</li>"
}
}
</script>
2.5 JSON数据/object数据类型
-
object数据类型就是JSON数据,也叫对象
-
对象/object/JSON数据:一组无序的 没有长度的数据 也是可以存储多个 可以存储任意数据类型
{
属性名/key/键:属性值/value/值
}
注意:属性名 可加可不加引号
注意:数据和数据之间用逗号隔开
{
"name":"小候老师",
"age":20,
"sex":"男",
"isOn":true
}
-
基础用法
var obj = {
"name": "小候老师",
age: 20,
"sex": "男",
isOn: true,
a: null,
b: undefined,
c: [1, 2, 3, 4],
d: {
"skill": "第一阶段"
},
f: function () { } //函数 函数在对象里面 我们一般叫方法
}
console.log(obj);
console.log(obj.length);//undefined 对象没有长度
// 2.获取object中的属性值 obj.属性名
console.log(obj.name);//小候老师
console.log(obj.c);// [1,2,3,4]
// 3.如果属性名是一个变量 obj[变量名]
var s = "sex";
console.log(obj[s]);
// 4.如果样式名是一个变量 标签.style[变量名]
var odiv = document.getElementsByTagName("div")[0];
// 获取样式 标签.style.样式名
console.log(odiv.style.width)
var w = "width";
console.log(odiv.style[w])
// 6.设置属性 obj.属性名 = 值
obj.name = "候世杰";
console.log(obj)
//7.如果给一个不存在的属性添加值 是直接追加到对象中
obj.hobby = "敲代码";
console.log(obj)
2.6 for-in
<script>
// for-in 遍历对象
var obj = {
"name": "小候老师",
age: 20,
"sex": "男",
isOn: true,
a: null,
b: undefined,
c: [1, 2, 3, 4],
d: {
"skill": "第一阶段"
},
f: function () { } //函数 函数在对象里面 我们一般叫方法
}
// for(var 变量名 in 对象){ 循环体}
// 注意 对象有几个数据就遍历几次 遍历完自动结束循环
for (var i in obj) { // i 里面存储的是属性名 i = "name" i="age" i="sex"
// 如果属性名是一个变量 obj[变量名]
console.log(obj[i])
}
</script>
3. this
3.1 为什么用this
<body>
<div>盒子1</div>
<div>盒子2</div>
<div>盒子3</div>
<div>盒子4</div>
<div>盒子5</div>
<script>
var oDiv = document.getElementsByTagName("div");
oDiv[0].onclick = function(){
console.log(oDiv[0].innerHTML)
}
oDiv[1].onclick = function(){
console.log(oDiv[1].innerHTML)
}
console.log(oDiv.length);//5
// 通过for循环添加点击事件
for(var i = 0;i<oDiv.length;i++){
// 循环添加事件 事件不会立马执行 但是for循环执行完毕
// 点击盒子的时候 才会执行事件里面的代码 此时i的值是5
oDiv[i].onclick = function(){
console.log(i);//5
console.log(oDiv[i]);//undefined
}
}
// i = 5
</script>
</body>
3.2 this指向
-
this 这个的意思
-
在不同的地方 this指向的内容不同 取决于当前函数被调用时所处的环境
-
事件处理函数 : 标签.事件类型 = function() { 要做的事}
-
==在事件处理函数中 ------ this指向触发事件的对象----点谁指向谁==
-
-
基础使用
<button>按钮1</button>
<script>
var btn = document.getElementsByTagName("button")[0];
// 事件处理函数this的指向----指当前触发事件的对象----点谁指向谁
btn.onclick = function(){
console.log(this)//指向button标签
}
</script>
-
this的指向---练习
<body>
<div>盒子1</div>
<div>盒子2</div>
<div>盒子3</div>
<div>盒子4</div>
<div>盒子5</div>
<script>
var oDiv = document.getElementsByTagName("div");
oDiv[0].onclick = function(){
console.log(oDiv[0].innerHTML)
}
oDiv[1].onclick = function(){
console.log(oDiv[1].innerHTML)
}
console.log(oDiv.length);//5
// 通过for循环添加点击事件
for(var i = 0;i<oDiv.length;i++){
// 循环添加事件 事件不会立马执行 但是for循环执行完毕
// 点击盒子的时候 才会执行事件里面的代码 此时i的值是5
oDiv[i].onclick = function(){
// console.log(i);//5
// console.log(oDiv[i]);//undefined
// 利用this解决这个问题
// 标签.innerHTML
// this---当前触发事件的对象
console.log(this)
console.log(this.innerHTML)
}
}
// i = 5
</script>
3.3 开关效果
3.1.1 单组开发效果
-
现象:一个事件里面有两种状态
-
解决
-
定义一个变量 用于标识当前的状态
-
通过判断不同变量的状态 选择执行不同的逻辑
-
当状态发生改变的时候 变量的值需要做改变
-
<div></div>
<script>
var oDiv = document.getElementsByTagName("div")[0];
var tag = true;//true---200px false-50px
oDiv.onclick = function(){
// oDiv.style.height = "200px";
if(tag){ //开 200px
oDiv.style.height = "200px";
tag = false;
}else{//关 50px
oDiv.style.height = "50px";
tag = true;
}
}
</script>
3.1.2 多组开发效果(问题版)
<body>
<div>盒子1</div>
<div>盒子2</div>
<div>盒子3</div>
<div>盒子4</div>
<div>盒子5</div>
<script>
var oDiv = document.getElementsByTagName("div");
var tag = true;//true----200px false--50px
// 利用for循环添加点击事件
for(var i = 0;i<oDiv.length;i++){
oDiv[i].onclick = function(){
// 通过for循环添加点击事件 在点击事件中无法拿到i的值 拿的永远是i最后一次值
if(tag){
this.style.height = "200px";
tag = false;
}else{
this.style.height = "50px";
tag = true
}
}
}
/*
问题:公用了一个tag 交叉点击的时候 就出现了混乱
解决:每个盒子都定义一个属于自己的tag值
*/
</script>
</body>
3.4自定义属性
3.4.1什么是属性
-
什么是属性:存在开始标签上 属性名=属性值 例如class="box" id="wrap"
-
固有属性:系统给定的属性 例如 class id style href src
-
自定义属性:程序员自己定义的属性
-
3.4.2设置和获取自定义属性
-
如何设置和获取自定义属性
<body>
<!-- class和id叫固有属性 a和b叫自定义属性 -->
<div class="box" id="wrap" a="123" b="这是一个div标签"></div>
<script>
var oDiv = document.getElementsByTagName("div")[0];
/*--------------如何获取自定义属性 标签.属性名----------------------*/
//1.如果直接在标签上定义 可以在结构上看到 但是无法获取
console.log(oDiv.a);//undefined
console.log(oDiv.b);//undefined
// 2.通过js添加属性:结构上看不到 但是可以在js中获取
// 通过js设置自定义属性 标签.属性名 = 值
oDiv.c = "456";
console.log(oDiv.c);//456
</script>
</body>
3.4.3自定义属性解决多组展开收起
-
多组展开收起(解决)
<body>
<div >盒子1</div>
<div>盒子2</div>
<div>盒子3</div>
<div>盒子4</div>
<div>盒子5</div>
<script>
var oDiv = document.getElementsByTagName("div");
// var tag = true;//true----200px false--50px
// 利用for循环添加点击事件
for (var i = 0; i < oDiv.length; i++) {
oDiv[i].tag = true;//给每个盒子设置自定义属性tag=true
oDiv[i].onclick = function () {
console.log(this.tag)//点击谁 就获取谁的tag属性
// 通过for循环添加点击事件 在点击事件中无法拿到i的值 拿的永远是i最后一次值
if (this.tag) {
this.style.height = "200px";
this.tag = false;
} else {
this.style.height = "50px";
this.tag = true;
}
}
}
/*
问题:公用了一个tag 交叉点击的时候 就出现了混乱
解决:每个盒子都定义一个属于自己的tag值
*/
</script>
</body>