【06问:?? 和 || 区别】

在JavaScript中,??|| 是两个常用的操作符,用于处理变量的默认值和条件判断。虽然它们在某些情况下可能看起来类似,但它们有着不同的用途和行为。以下是它们的详细区别:

|| 操作符

|| 是逻辑或操作符,用于短路求值。它的工作原理是:如果左操作数是一个“假值”(falsy value),则返回右操作数;否则返回左操作数。JavaScript 中的“假值”包括:

  • false
  • 0
  • -0
  • 0n(BigInt 零值)
  • ""(空字符串)
  • null
  • undefined
  • NaN
let a = 0;
let b = a || 10;
console.log(b); // 输出 10,因为 0 是假值

let c = "Hello";
let d = c || "World";
console.log(d); // 输出 "Hello",因为 c 是真值

?? 操作符

?? 是空值合并操作符,它只在左操作数是 nullundefined 时返回右操作数。其他情况下,它会返回左操作数。这个操作符主要用于处理可能为 nullundefined 的值。

let a = 0;
let b = a ?? 10;
console.log(b); // 输出 0,因为 0 不是 null 或 undefined

let c = null;
let d = c ?? "default";
console.log(d); // 输出 "default",因为 c 是 null

let e = undefined;
let f = e ?? "default";
console.log(f); // 输出 "default",因为 e 是 undefined

主要区别

  1. 处理的值类型

    • || 操作符会将所有的假值(包括 false0"" 等)视为 false,并返回右操作数。
    • ?? 操作符只会将 nullundefined 视为空值,其他值都不会影响结果。
  2. 使用场景

    • 使用 || 操作符可以处理任何假值的情况,适用于需要覆盖所有假值的场景。
    • 使用 ?? 操作符则更适合在只需要处理 nullundefined 的场景下使用,避免不必要的值覆盖。
let value1 = 0;
let result1 = value1 || "default";
let result2 = value1 ?? "default";

console.log(result1); // 输出 "default",因为 0 是假值
console.log(result2); // 输出 0,因为 0 不是 null 或 undefined
<think>嗯,用户的是手机卡的ICCID是什么以及如何查看它。首先,我需要明确ICCID的定义结构。ICCID是集成电路卡识别码,通常印在SIM卡上,由19到20位数字组成,结构包括行业代码、国家代码、运营商代码等。接下来要确定如何查看,常见的方法包括物理查看SIM卡、手机设置里查询,不同操作系统可能有不同路径。比如安卓在设置-关于手机-状态信息里,iOS在设置-通用-关于里。另外,运营商APP拨号代码也是可行的方法,比如*#06#可能显示IMEIICCID。需要注意位数是否正确,区分ICCIDIMEI。用户可能需要具体的步骤注意事项,比如双卡手机要区分卡槽,实体卡磨损的情况如何处理。生成相关题时要考虑用户可能遇到的后续题,比如ICCID的作用、补办是否需要、找回方法等。确保回答结构清晰,分点列出,符合之前的格式要求,避免使用第一人称步骤词汇,正确应用数学格式代码示例。最后,相关题要基于当前内容,比如ICCID结构解析、补卡流程、与IMEI的区别等。</think>**ICCID定义与结构** ICCID(Integrate Circuit Card Identifier)是SIM卡的唯一识别码,采用$E.118$标准编码规范。完整格式为: $$89(MCC)86(CN)0A1B2C3D4E5F6G7H$$ 前两位$89$为行业代码,$86$代表中国,后续$0A1B$为运营商代码(中国移动:00,中国电信:06),末尾$5F6G7H$为个人化代码。实体SIM卡表面通常印刷后8位,完整20位需通过系统查询。 **物理查看方法** 实体SIM卡背面第三行数字为ICCID片段,例如: ``` 89860121800012345678 ``` 金属芯片下方标注的$5/6$位数字为校验码,验证公式: $$CheckSum = (Sum(odd\ digits) \times 2 + Sum(even\ digits)) \mod 10$$ 若卡片磨损,可用放大镜观察印刷凹痕特征。 **系统查询路径** - **Android系统**: 进入「设置」-「关于手机」-「SIM卡状态」,连续点击「网络」字段3次触发工程模式,选择「SIM card info」查看完整ICCID ```java // Android系统查询ICCID的底层接口示例 TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String iccid = tm.getSimSerialNumber(); ``` - **iOS系统**: 打开「设置」-「通用」-「关于本机」,长按「ICCID」字段5秒显示完整号码。双卡设备需先进入「蜂窝网络」选择对应号码 ```swift // iOS获取ICCID的核心方法 let networkInfo = CTTelephonyNetworkInfo() let carriers = networkInfo.serviceSubscriberCellularProviders carriers?.values.first?.iccid ``` **运营商渠道查询** 登录中国移动/联通/电信官方APP,在「我的」-「SIM卡信息」页面可获取完整ICCID: - 中国移动APP需发送短信指令`CXICCID`至10086激活显示 - 中国电信用户通过「天翼生活」APP扫描SIM卡背面二维码解码ICCID - 中国联通APP「服务」-「查询」-「基础信息」直接显示 **技术验证要点** 1. 有效ICCID需通过Luhn算法校验: $$(sum_{n=1}^{20} a_n + sum_{n=1}^{10} b_n) \equiv 0 \pmod{10}$$ 其中$a_n$为奇数位数字,$b_n$为偶数位数字乘2后各位之 2. 双卡设备需确认查询的是目标卡槽(Slot1/Slot2) 3. eSIM的ICCID格式为$89(MCC)xxyyyyyyyzzzzzzzzz$,可通过运营商配置文件导出 **安全警示** ICCID与$K_i$密钥共同构成SIM卡安全体系,避免在公共平台展示完整号码。部分手机系统会隐藏中间数字(如`898601******4567`),如需完整号码建议通过运营商官方渠道获取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值