JS基础 流程控制

Posted wgchen~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS基础 流程控制相关的知识,希望对你有一定的参考价值。

阅读目录

if

当条件为真时执行表达式代码块。

let state = true;
if (true) 
    console.log('表达式成立');


如果只有一条代码块,可以不用写 

let state = true;
if (true) console.log('表达式成立');

console.log('一直都显示的内容');

if/else
下面是使用多条件判断密码强度的示例

<body>
    <input type="password" name="title" />
    <span></span>
</body>

<script>
    let input = document.querySelector("[name='title']");

    input.addEventListener("keyup", function () 

        let length = this.value.length;
        let msg;
        
        if (length > 10) 
            msg = "密码已经无敌了";
         else if (length > 6) 
            msg = "密码安全性中级";
         else 
            msg = "这密码,要完的节奏";
        
        document.querySelector("span").innerhtml = msg;
    );
</script>

三元表达式

是针对 if 判断的简写形式。

let n = true ? 1 : 2;
console.log(n); //1

let f = true ? (1 == true ? 'yes' : 'no') : 3;
console.log(f); // yes

下面是创建DIV元素的示例,使用三元表达式设置初始值

<script>
    function div(options = ) 
        let div = document.createElement("div");
        div.style.width = options.width ? options.width : "100px";
        div.style.height = options.height ? options.height : "100px";
        div.style.backgroundColor = options.bgcolor ? options.bgcolor : "red";
        document.body.appendChild(div);
    

    div();
</script>

<script>
    function div(options = ) 
        let div = document.createElement("div");
        div.style.width = options.width ? options.width : "100px";
        div.style.height = options.height ? options.height : "100px";
        div.style.backgroundColor = options.bgcolor ? options.bgcolor : "red";
        document.body.appendChild(div);
    

    options = width:200,height:50,bgcolor:"green";
    div(options);
</script>

switch

可以将 switch 理解为 if 的另一种结构清晰的写法。

  • 如果表达式等于 case 中的值,将执行此 case 代码段
  • break 关键字会终止 switch 的执行
  • 没有任何 case 匹配时将执行 default 代码块
  • 如果case执行后缺少break则接着执行后面的语句
let name = '视频';
switch (name) 
    case '产品':
        console.log('产品');
        break;
    case '视频':
        console.log('视频');
        break;
    default:
        console.log('电视')


case 合用示例

let error = 'warning';
switch (error) 
  case 'notice':
  case 'warning':
      console.log('警告或提示信息');
      break;
  case 'error':
      console.log('错误信息');

在 switch 与 case 都可以使用表达式

<script>
    function message(age) 
        switch (true) 
            case age < 15:
                console.log("儿童");
                break;
            case age < 25:
                console.log("青少年");
                break;
            case age < 40:
                console.log("青年");
                break;
            case age < 60:
                console.log("中年");
                break;
            case age < 100:
                console.log("老年");
                break;
            default:
                console.log("年龄输出错误");
        
    
    message(10);
</script>


下面例子缺少 break 后,会接着执行后面的 switch 代码。

switch (1) 
  case 1:
    console.log(1);
  case 2:
    console.log(2);
  default:
    console.log("default");

while

循环执行语句,需要设置跳出循环的条件否则会陷入死循环状态。

下面是循环输出表格的示例。

<script>
    let row = 5;
    document.write(`<table border="1" width="100">`);
    while (row-- != 0) 
        document.write(`<tr><td>$row</td></tr>`);
    
    document.write(`</table>`);
</script>


do/while
后条件判断语句,无论条件是否为真都会先进行循环体。

下面通过循环输出三角形示例,要注意设置循环跳出的时机来避免死循环。

<script>
    function hd(row = 5) 
    
        let start = 0;
        
        do 
        
            let n = 0;
            do 
                document.write("*");
             while (++n <= start);
            document.write("<br/>");
            
         while (++start <= row);
        
    
    
    hd();
</script>

*
**
***
****
*****
******

for

可以在循环前初始化初始计算变量。
下面是使用 for 打印倒三角的示例:

<script>
    for (let i = 10; i > 0; i--) 
        for (let n = 0; n < i; n++) 
            document.write('*');
        
        document.write("<br/>");
    
</script>

**********
*********
********
*******
******
*****
****
***
**
*
<script>
    for (let i = 1; i <= 5; i++) 

        for (let n = 5 - i; n > 0; n--) 
            document.write('&nbsp;');
        
        for (let m = i * 2 - 1; m > 0; m--) 
            document.write('*');
        
        document.write("<br/>");

    
</script>

    *
   ***
  *****
 *******
*********

for 的三个参数可以都省略或取几个

let i = 1;
for (; i < 10; ) 
  console.log(i++);

break/continue

break 用于退出当前循环,continue 用于退出当前循环返回循环起始继续执行。

获取所有偶数,所有奇数使用 continue 跳过

for (let i = 1; i <= 10; i++) 
  if (i % 2) continue;
  console.log(i);

获取三个奇数,超过时使用 break 退出循环

let count = 0,num = 3;

for (let i = 1; i <= 10; i++) 
  if (i % 2) 
    console.log(i);
    if (++count == num) break;
  

label

标签 (label) 为程序定义位置,可以使用 continue/break 跳到该位置。

下面取 i+n 大于 15 时退出循环

<script>
    wgchen: for (let i = 1; i <= 10; i++) 
        willem: for (let n = 1; n <= 10; n++) 
            if (n % 2 != 0) 
                continue willem;
            

            console.log(i, n);
            
            if (i + n > 15) 
                break wgchen;
            
        
    
</script>

for/in

用于遍历对象的所有属性,for/in 主要用于遍历对象,不建议用来遍历数组。

遍历数组操作

<script>
    let hd = [
         title: "第一章 走进javascript黑洞", lesson: 3 ,
         title: "ubuntu19.10 配置好用的编程工作站", lesson: 5 ,
         title: "媒体查询响应式布局", lesson: 8 
    ];

    document.write(`
                <table border="1" width="100%">
                <thead><tr><th>标题</th><th>课程数</th></thead>
            `);

    for (let key in hd) 
        document.write(`
                    <tr>
                    <td>$hd[key].title</td>
                    <td>$hd[key].lesson</td>
                    </tr>
                `);
    
    
    document.write("</table>");
</script>

遍历对象操作

<script>
    let info = 
        name: "wgcehn",
        url: "wgchen.blog.csdn.net"
    ;
    
    for (const key in info) 
        if (info.hasOwnProperty(key)) 
            console.log(info[key]);
        
    
</script>

JS hasOwnProperty() 方法

JS hasOwnProperty(propertyName) 方法:
是用来检测属性是否为对象的自有属性,如果是,返回true,否者false; 参数 propertyName指要检测的属性名;

hasOwnProperty() 方法是 Object 的原型方法(也称实例方法),它定义在 Object.prototype 对象之上,所有 Object 的实例对象都会继承 hasOwnProperty() 方法。


hasOwnProperty() 只会检查对象的自有属性,对象原形上的属性其不会检测;
但是对于原型对象本身来说,这些原型上的属性又是原型对象的自有属性,所以原形对象也可以使用 hasOwnProperty() 检测自己的自有属性;

let obj = 
    name:'张睿',
    age:18,
    eat:
        eatname:'面条',
        water:
            watername:'农夫山泉'
        
    

console.log(obj.hasOwnProperty('name')) //true
console.log(obj.hasOwnProperty('age'))  //true
console.log(obj.hasOwnProperty('eat'))  //true
console.log(obj.hasOwnProperty('eatname'))  //false
console.log(obj.hasOwnProperty('water'))  //false
console.log(obj.hasOwnProperty('watername'))  //false
console.log(obj.eat.hasOwnProperty('eatname'))  //true
console.log(obj.eat.hasOwnProperty('water'))  //true
console.log(obj.eat.hasOwnProperty('watername'))  //false
console.log(obj.eat.water.hasOwnProperty('watername'))  //true

遍历window对象的所有属性

<script>
    for (name in window) 
        console.log(window[name]);
    
</script>

for/of

用来遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构。

与 for/in 不同的是 for/of 每次循环取其中的值而不是索引。

遍历数组

<script>
    let arr = [1, 2, 3];
    for (const iterator of arr) 
        console.log(iterator);
    
</script>

遍历字符串

<script>
    let str = 'wgchen';
    for (const iterator of str) 
        console.log(iterator);
    
</script>

使用迭代特性遍历数组

<script>
    const hd = ["willem", "wgchen"];

    for (const [key, value] of hd.entries()) 
        console.log(key, value); //这样就可以遍历了
    
</script>

JavaScript entries() 方法

Array entries() 从数组中创建一个可迭代的对象。

迭代对象的每个实体来自数组对应的元素。

0,Banana

1,Orange

2,Apple

注意: IE11 及其更早的浏览器版本不支持 entries 方法。

<p id="demo1"></p>
<p id="demo2"></p>
<p id="demo3"></p>

<script>
var fruits = ["Banana", "Orange",

以上是关于JS基础 流程控制的主要内容,如果未能解决你的问题,请参考以下文章

JS基础 流程控制

js基础——流程控制语句

JS基础-语法+流程控制语句+函数+内置对象数组

js 流程控制

JS基础5-流程控制语句之条件(ifswitch)

js中的原形链问题