如何在JavaScript中对一个数字进行切片?

3

我有以下的代码片段:

var code = 895804220010013030;
var last = code.slice(-2);
var n = last.includes(00, 01, 10, 11, 20, 21, 30, 31 );

if (n===true) {
  alert(n)
} else {
 alert('false')
}

但是如果不将数字用引号括起来,它会引发语法错误,唯一有效的方法就是对数字加上引号。
var code = 895804220010013030;

但我需要在不加引号的情况下运行它。


1
因为Number类型没有slice函数,所以你会收到那个错误。另外,includes函数的使用方式是someString.includes(elementToSearch, ?fromIndex) - halilcakar
1
“slice” 方法仅适用于字符串和类数组对象,不适用于数字。 - arieljuod
如果不使用字符串,您的代码将永远无法正常工作(正如@pai.not.pi所指出的-这里有一个测试可以说明问题:var x = 895804220010013030; console.log(x);console.log(895804220010013030 === 895804220010013000)(其中895...030 === 895...000))。 - freedomn-m
不使用单引号或双引号,创建JavaScript字符串:https://dev59.com/wmox5IYBdhLWcg3ww3GV - Mateen
3个回答

5

将此改为:

var last = code.slice(-2);

转换为:

var last = String(code).slice(-2);

或者这样:
var last = code.toString().slice(-2);

为什么?

因为 slice()String 的方法,而不是 Number 的方法。它从一个字符串中提取一段并返回一个新的字符串,而不修改原来的字符串。

更新

根据第一条评论。

var code = 130031;
var last = code.toString().slice(-2);
var n = [00, 01, 10, 11, 20, 21, 30, 31].includes(last);

欲了解更多信息,请参阅includes


该包含文件存在错误,无法正确读取数字。在这个例子中,它无法检测到数字31。函数myFunction。 - Deviandorx
我根据你当前的问题回答了,但这会引发语法错误。你还有一个include的问题。 - Menai Ala Eddine - Aladdin
请阅读有关 includes() 的更多信息。 - Menai Ala Eddine - Aladdin
另一种将数字转换为字符串的选项:var str = number + ""; - freedomn-m
@freedomn-m,是的,但JS中的强制转换解析有什么区别吗? - Menai Ala Eddine - Aladdin

1

0

编辑:

我必须编辑答案的开头,因为我刚意识到你试图在code变量中捕获的数字实际上大于JS中可用的max 安全整数值。

slice不是在数字类型上定义的方法。你可以选择将代码存储为string,这会让你的生活更轻松,

var code = '895804220010013030';
var last = Number(code.slice(-2));
var n = [00, 01, 10, 11, 20, 21, 30, 31].includes(last);

if (n===true) {
  alert(n)
} else{
 alert('false')
}

此外,有更好的方法来编写 if-else,因为 n 的值将是一个布尔值,因为 includes 方法总是返回 true 或 false。

根据 MDN

includes() 方法确定数组是否包含其条目中的某个值,如适当地返回 true 或 false。

要么,

if (n) {
  alert(n);
} else {
  alert(false);
}

或者简单地说,

alert(n);

在这个例子中,它无法正确识别数字31。function myFunction() {var code = 130031; var last = code.toString().slice(-2);alert(last);var n = last.includes(00, 01, 10, 11, 20, 21, 30, 31 ); alert(n) if (n==true) { alert(n) } else{ alert('false') } } - Deviandorx
@MenaiAlaEddine-Aladdin 哈哈,我没意识到:D 谢谢,我已经更新了我的答案 :) - painotpi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接