Nodejs代码:switch(t[i].header.msg_type[3]-'0') 中header.msg_type[3]-'0'是什么意思?

Nodejs代码:switch(t[i].header.msg_type[3]-‘0’) 中header.msg_type[3]-'0’是什么意思?

nodejs代码: switch(t[i].header.msg_type[3]-‘0’) 中header.msg_type[3]-'0’是什么意思

3 回复

在Node.js代码中,switch(t[i].header.msg_type[3] - '0') 这一行中的 header.msg_type[3] - '0' 是一种将字符串转换为数字的方法。具体来说,它用于将一个表示数字的字符(例如 ‘1’, ‘2’, ‘3’ 等)转换为其对应的整数值。

示例解释

假设 t[i].header.msg_type 是一个字符串数组,例如 ['A', 'B', 'C', '2']。这里的 '2' 是一个字符,而不是一个数字。通过减去字符 '0',我们可以将其转换成对应的数字 2

// 假设 t[i].header.msg_type 是 ['A', 'B', 'C', '2']
const char = t[i].header.msg_type[3]; // 获取字符 '2'
const num = char - '0'; // 将字符 '2' 转换为数字 2

在这个例子中,char - '0' 实际上执行的是字符 '2' 的 ASCII 值减去字符 '0' 的 ASCII 值,结果就是 50 - 48 = 2

为什么这样做?

在JavaScript中,直接比较字符和数字可能会导致意外的结果。例如,'2' == 2 返回 false,因为一个是字符串,另一个是数字。通过这种方式转换,可以确保字符被正确地转换为对应的数字,从而使得 switch 语句能够正确地工作。

完整示例代码

const t = [
    {
        header: {
            msg_type: ['A', 'B', 'C', '2']
        }
    },
    {
        header: {
            msg_type: ['A', 'B', 'C', '3']
        }
    }
];

for (let i = 0; i < t.length; i++) {
    const char = t[i].header.msg_type[3];
    const num = char - '0';

    switch (num) {
        case 1:
            console.log('Case 1');
            break;
        case 2:
            console.log('Case 2');
            break;
        case 3:
            console.log('Case 3');
            break;
        default:
            console.log('Default Case');
            break;
    }
}

在这个例子中,当 msg_type[3] 是 ‘2’ 时,输出将是 “Case 2”;如果是 ‘3’,则输出将是 “Case 3”。


此代码作者是个C funner

header.msg_type[3]-'0'

就是求ascii字符代表的数字,比如 ‘3’ - ‘0’ =3。javascript中更常见写法是parseInt(header.msg_type[3]),或者直接省略 - ‘0’ 。当然也有可能这样写是有什么特别的用意,毕竟楼主没给出上下文代码。

在Node.js代码中,switch(t[i].header.msg_type[3] - '0') 这一行的意思是将 t[i].header.msg_type[3] 字符转换为对应的数字值。这里具体的操作是对字符串类型的字符减去字符 '0',实际上是为了将一个表示数字的字符(例如 '1''9')转换为其对应的整数值。

举个例子,假设 t[i].header.msg_type[3] 的值为 '5',那么 t[i].header.msg_type[3] - '0' 就相当于 '5' - '0'。由于字符在JavaScript中可以进行这样的运算,这实际上会计算出 '5''0' 之间的ASCII码差值,结果是 5。因此,在这个例子中,'5' - '0' 的结果就是整数 5

接下来的 switch 语句会根据这个计算出来的整数值来决定执行哪个分支:

const t = [
    {
        header: {
            msg_type: "1234"
        }
    }
];

for (let i = 0; i < t.length; i++) {
    const msgTypeNumber = t[i].header.msg_type[3] - '0';

    switch(msgTypeNumber) {
        case 0:
            console.log("msg_type[3] is 0");
            break;
        case 1:
            console.log("msg_type[3] is 1");
            break;
        case 2:
            console.log("msg_type[3] is 2");
            break;
        // 其他case...
        default:
            console.log("msg_type[3] is some other number");
            break;
    }
}

在这个例子中,如果 t[i].header.msg_type[3] 的值是 '4',那么 msgTypeNumber 将被计算为 4,然后 switch 语句会匹配到 case 4 并执行相应的代码块。

回到顶部