Javascript 中变量的默认数据类型是什么?
What is the default data-type for variables in Javascript?
我正在努力学习应用意义上的 Javascript,而不仅仅是学习它的 'theory'。
我写的部分代码如下:
let count;
splitStory.forEach(function(element) {
if (overusedWords.includes(element)) {
count = count + 1;
}
})
console.log(count);
当我 运行 函数时,它会将 NaN
记录到控制台。但是,当我将 let count;
更改为 let count = 0
时,它会记录应该记录到控制台的正确数字。据我了解,对变量使用 let
声明是有效的,但在这种情况下,似乎存在问题。如果我将 count = count + 1;
替换为 count = 'sample_string'
,它会工作并将 'sample_string'
记录到控制台。这引出了我的问题,除非在声明中另有说明,否则变量的默认数据类型是字符串吗?
JavaScript 支持 变量类型 。它根据运行时变量的值修改变量的数据类型。
例如,如果您使用一些 'string' 值初始化变量,例如 -
let count = 'someString'; //data type would be string
稍后,如果您再次分配一些数字值,例如 -
count = 23 // data type of count becomes number
但是如果你不赋任何值而只是声明变量,它的数据类型是"undefined".
所以在你写的情况下:let count;
这等于:
let count = undefined;
希望这能澄清您的疑问。
用 var 或 let 声明的变量的默认值是 undefined,除非你将它初始化为一个值,在这种情况下,它获取值的类型。如果你不初始化它,那么在它被设置为某个值之前它不会获得类型。
见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var
正如@Jaromanda 之前在评论中所说,javascript 是一种 无类型语言 或者有时可以称为 弱类型 (这不是一个合适的短语,因为 JS 本身根本没有编译器)这意味着 JavaScript 变量可以保存任何数据类型的值.
有什么问题?
通常当你定义这样的东西时:let count;
,count
本身将保持未初始化状态,直到你直接给它赋值。所以,在这个在这种情况下,未分配的 value 元素类型是 undefined
,它的值是 undefined
,那么每当您尝试 console.log
这样的事情时,它将是未定义的,我们来看这个例子。
let count;
console.log('count type is:', typeof count)
console.log('count value is:', count)
可以看到count
的类型和值都是undefined
。
注意:您可以阅读this了解更多信息。
让我们看看你的具体例子
let count;
console.log('count type after declaration is:', typeof count);
console.log('count value after declaration is:', count);
let splitStory = ['a', 'b', 'c'];
let overusedWords = ['d', 'b', 'e'];
splitStory.forEach(function(element) {
if (overusedWords.includes(element)) {
count = count + 1;
}
})
console.log('count type at the end is:', typeof count);
console.log('count value at the end is:', count);
这是怎么回事?
正如@Patrick 之前所说 undefined + 1
是 NaN
,它甚至是什么意思? NaN
(表示非数字)本身是另一种数据类型(很少使用)。但是为什么undefined + 1
的结果是NaN
呢?根据 MDN, 每当预期结果应该是一个数字但由于多种条件它会失败 就像 Math.sqrt(-1)
结果将是 NaN
也是。 因此,在这种情况下,count + 1
的 预期输出是一个数字 因为我们正在进行算术运算并希望递增 count
值乘以 1
,所以 因为 count
值本身是 undefined
不可能进行递增操作 (因为 undefined
是不可配置的 属性),所以结果将是 NaN
.
让我们进入第二个子句。
let count = 'sample_string';
console.log('count type after declaration is:', typeof count);
console.log('count value after declaration is:', count);
let splitStory = ['a', 'b', 'c'];
let overusedWords = ['d', 'b', 'e'];
splitStory.forEach(function(element) {
if (overusedWords.includes(element)) {
count = count + 1;
}
})
console.log('count type at the end is:', typeof count);
console.log('count value at the end is:', count);
这里发生了什么?
输出是 sample_string1
为什么?简短的回答是它们会连接起来。
在JavaScript中,+
运算符用于数字加法和字符串连接。当您将数字 "add" 转换为字符串时,解释器会将您的数字转换为字符串并将两者连接在一起。 因此,由于 count
的类型是 string
,在此count + 1
操作 JS 本身也将 1
视为字符串。
我们应该怎样做才能防止这样的事情发生?
很简单,我们应该始终牢记,每当我们定义一个变量时,我们也应该通过给它赋值来表明它的类型。
我正在努力学习应用意义上的 Javascript,而不仅仅是学习它的 'theory'。
我写的部分代码如下:
let count;
splitStory.forEach(function(element) {
if (overusedWords.includes(element)) {
count = count + 1;
}
})
console.log(count);
当我 运行 函数时,它会将 NaN
记录到控制台。但是,当我将 let count;
更改为 let count = 0
时,它会记录应该记录到控制台的正确数字。据我了解,对变量使用 let
声明是有效的,但在这种情况下,似乎存在问题。如果我将 count = count + 1;
替换为 count = 'sample_string'
,它会工作并将 'sample_string'
记录到控制台。这引出了我的问题,除非在声明中另有说明,否则变量的默认数据类型是字符串吗?
JavaScript 支持 变量类型 。它根据运行时变量的值修改变量的数据类型。
例如,如果您使用一些 'string' 值初始化变量,例如 -
let count = 'someString'; //data type would be string
稍后,如果您再次分配一些数字值,例如 -
count = 23 // data type of count becomes number
但是如果你不赋任何值而只是声明变量,它的数据类型是"undefined".
所以在你写的情况下:let count;
这等于:
let count = undefined;
希望这能澄清您的疑问。
用 var 或 let 声明的变量的默认值是 undefined,除非你将它初始化为一个值,在这种情况下,它获取值的类型。如果你不初始化它,那么在它被设置为某个值之前它不会获得类型。
见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
和https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var
正如@Jaromanda 之前在评论中所说,javascript 是一种 无类型语言 或者有时可以称为 弱类型 (这不是一个合适的短语,因为 JS 本身根本没有编译器)这意味着 JavaScript 变量可以保存任何数据类型的值.
有什么问题?
通常当你定义这样的东西时:let count;
,count
本身将保持未初始化状态,直到你直接给它赋值。所以,在这个在这种情况下,未分配的 value 元素类型是 undefined
,它的值是 undefined
,那么每当您尝试 console.log
这样的事情时,它将是未定义的,我们来看这个例子。
let count;
console.log('count type is:', typeof count)
console.log('count value is:', count)
可以看到count
的类型和值都是undefined
。
注意:您可以阅读this了解更多信息。
让我们看看你的具体例子
let count;
console.log('count type after declaration is:', typeof count);
console.log('count value after declaration is:', count);
let splitStory = ['a', 'b', 'c'];
let overusedWords = ['d', 'b', 'e'];
splitStory.forEach(function(element) {
if (overusedWords.includes(element)) {
count = count + 1;
}
})
console.log('count type at the end is:', typeof count);
console.log('count value at the end is:', count);
这是怎么回事?
正如@Patrick 之前所说 undefined + 1
是 NaN
,它甚至是什么意思? NaN
(表示非数字)本身是另一种数据类型(很少使用)。但是为什么undefined + 1
的结果是NaN
呢?根据 MDN, 每当预期结果应该是一个数字但由于多种条件它会失败 就像 Math.sqrt(-1)
结果将是 NaN
也是。 因此,在这种情况下,count + 1
的 预期输出是一个数字 因为我们正在进行算术运算并希望递增 count
值乘以 1
,所以 因为 count
值本身是 undefined
不可能进行递增操作 (因为 undefined
是不可配置的 属性),所以结果将是 NaN
.
让我们进入第二个子句。
let count = 'sample_string';
console.log('count type after declaration is:', typeof count);
console.log('count value after declaration is:', count);
let splitStory = ['a', 'b', 'c'];
let overusedWords = ['d', 'b', 'e'];
splitStory.forEach(function(element) {
if (overusedWords.includes(element)) {
count = count + 1;
}
})
console.log('count type at the end is:', typeof count);
console.log('count value at the end is:', count);
这里发生了什么?
输出是 sample_string1
为什么?简短的回答是它们会连接起来。
在JavaScript中,+
运算符用于数字加法和字符串连接。当您将数字 "add" 转换为字符串时,解释器会将您的数字转换为字符串并将两者连接在一起。 因此,由于 count
的类型是 string
,在此count + 1
操作 JS 本身也将 1
视为字符串。
我们应该怎样做才能防止这样的事情发生?
很简单,我们应该始终牢记,每当我们定义一个变量时,我们也应该通过给它赋值来表明它的类型。