与或非的总结和几种好用的赋值

本文详细介绍了JavaScript中逻辑运算符||(逻辑或)和&&(逻辑与)的工作原理及应用场景,并通过实例展示了如何利用这些运算符简化条件判断逻辑。
1、||(逻辑或)
    1.只要 ‘||’ 前面为false,不管 ‘||’ 后面的是true还是false,都返回 ‘||’ 后面的值

        例如:console.log( '' || 1)   //返回的是1      注:在js逻辑运算中,-0、0、”“、null、false、undefined、NaN都会判为false

                   console.log( null || 0)   //返回的是0

    2.只要 ‘||’ 前面为true,不管 ‘||’ 后面的是true还是false,都返回 ‘||’ 前面的值

          例如:console.log( 'hello' || 0)   //返回的是hello    

                   console.log( 'hello'|| 1)   //返回的是'hello'

1、&&(逻辑与)

    1.只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;

        例如:console.log( 0 && ‘abc’)   //返回的是0    

                console.log( && null)   //返回的是0

    2.只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

         例如:console.log(  ‘abc’ && null)   //返回的是null   

                console.log(  ‘abc’ && 2)   //返回的是2

实际中的运用

    需求:当num值为0的时候,txt的值为起步,当num值为1的时候,txt的值为第一步

              当num值为2的时候,txt的值为第二步,当num为其它的时候,txt的值为结束

   let num = 0; 

    let txt = ''

     第一种方法:

                if (num === 0 ) {
             txt = '起步'
} else if (num === 1) {
txt = '第一步'
} else if (num === 2) {
txt = '第二步'
} else {
txt = '结束'

}

    第二种方法:

            switch (num) {
case  0:
 txt = '起步'
break
case  1:
txt = '第一步'
break
case  2:
txt = '第二步'
break
default :
txt = '结束'
break
    }


    第三种方法:使用与或非的方法

            let txt = (num === 0 && '起步') || (num === 1 && '第一步') ||
   (num === 2 && '第二步')  || '结束'

    第四种方法:        

            let txt = num === 0 ? '起步' : num === 0 ? '第一步' : 
          this.val === 0 ? '第二步' : '结束'

    第五种方法

            let txt = {'0': '起步', '1': '第一步', '2': '第二步'}[num] || '结束'


以上五种方法,第一种和第二种可读性强,后面几种简洁

<think>我们被要求回答:Java中如何给类的实例变量赋值,有哪些方? 根据引用[2]中的内容,程序可以在3个地方对实例变量执行初始化: 1. 定义实例变量时指定初始值 2. 非静态初始化块中对实例变量指定初始值 3. 构造器中对实例变量指定初始值 另外,我们还可以通过普通方(如setter方)在对象创建后给实例变量赋值。 因此,我们可以总结如下: 1. 直接初始化(定义时赋值) 2. 初始化块(非静态) 3. 构造方(构造函数) 4. 通过对象方(如setter)赋值 下面我们详细解释这四种方式,并给出示例。</think>### Java 中实例变量赋值的 4 种方式 在 Java 中,实例变量(非静态成员变量)的赋值主要通过以下 4 种方式实现: #### 1. **定义时直接初始化(最直接)** ```java public class Person { private String name = "无名氏"; // 定义时赋值 private int age = 18; // 定义时赋值 } ``` - ✅ 特点: 代码简洁,适用于固定初始值 - ⚠️ 注意: 初始化在构造器执行前完成[^3] #### 2. **构造方初始化(最常用)** ```java public class Person { private String name; private int age; // 通过构造器赋值 public Person(String name, int age) { this.name = name; // 使用this区分同名变量[^1] this.age = age; } } ``` - ✅ 特点: 灵活接收外部参数,支持不同初始化逻辑 - ⚠️ 注意: 必须显式使用 `this` 避免命名冲突 #### 3. **初始化块赋值(适合复杂逻辑)** ```java public class Person { private String name; private int age; // 初始化块(每次创建实例都执行) { name = "临时用户"; age = (int)(Math.random() * 20 + 18); // 随机年龄 } } ``` - ✅ 特点: 可执行多行代码,适合复杂初始化逻辑 - ⚠️ 注意: 执行顺序在直接初始化之后,构造器之前[^2] #### 4. **通过方赋值(创建后修改)** ```java public class Person { private String name; // Setter方赋值 public void setName(String name) { if(!name.isEmpty()) { this.name = name; } } // 普通方赋值 public void resetName() { this.name = "重置用户"; } } ``` - ✅ 特点: 支持对象创建后动态修改状态 - ⚠️ 注意: 需注意线程安全问题 --- ### 初始化执行顺序图解 ```mermaid graph TD A[定义时直接初始化] --> B[初始化块赋值] B --> C[构造器赋值] C --> D[通过方赋值] ``` > **关键规则**: > 1. 直接初始化初始化块按代码顺序执行 > 2. 构造器总是最后执行的初始化方式 > 3. 未显式初始化时,实例变量取默认值(`0`/`false`/`null`)[^3] --- ### 典型错误案例 ```java public class ErrorExample { private int id; public ErrorExample(int id) { id = id; // ❌ 参数自我赋值,实例变量id仍为0 } } ``` **修正方案**: 必须使用 `this.id = id` 明确指定赋值目标[^1] > 最佳实践:优先使用构造器初始化,配合 `final` 关键字保证不可变性: > `private final String id; // 必须在构造器中初始化`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值