我在尝试这个:
function add_things() {
var first = '2';
var second = '4';
alert(first + second);
}
Run Code Online (Sandbox Code Playgroud)
但它给了我24而不是6,我做错了什么?
cle*_*tus 30
你用+运算符连接两个字符串.尝试:
function add_things() {
var first = 2;
var second = 4;
alert(first + second);
}
Run Code Online (Sandbox Code Playgroud)
要么
function add_things() {
var first = '2';
var second = '4';
alert(parseInt(first, 10) + parseInt(second, 10));
}
Run Code Online (Sandbox Code Playgroud)
要么
function add_things() {
var first = '2';
var second = '4';
alert(Number(first) + Number(second));
}
Run Code Online (Sandbox Code Playgroud)
注意:如果你从一个属性或用户输入中获取字符串,那么第二个是非常合适的.如果它们是您定义的常量,并且您想要添加它们,则将它们定义为整数(如第一个示例中所示).
而且,正如所指出的,八进制是邪恶的.parseInt('010')实际上会出现数字8(八进制中的10是8),因此指定10的基数是个好主意.
Ben*_*n M 16
试试这个:
function add_things() {
var first = 2;
var second = 4;
alert(first + second);
}
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了单引号; first和second现在的整数.在你的原文中,它们是字符串(文本).
这是JavaScript 的" 坏部分 "之一,作为一种松散类型的语言,加法和连接运算符被重载.
JavaScript是松散类型的,但这并不意味着它没有数据类型只是因为变量,对象属性,函数或参数的值不需要为其分配特定类型的值.
基本上有三种原始数据类型:
null和undefined是两种特殊情况,其他一切只是对象类型的变体.
JavaScript类型 - 将类型的值转换为适合其使用上下文的类型(类型强制).
在您的示例中,尝试添加两个string类型的对象,因此会发生连接.
您可以通过多种方式"转换"或键入将变量转换为数字以避免此问题:
var a = "2";
var b = "4";
// a and b are strings!
var sum = Number(a) + Number(b); // Number constructor.
sum = +a + +b; // Unary plus.
sum = parseInt(a, 10) + parseInt(b, 10); // parseInt.
sum = parseFloat(a) + parseFloat(b); // parseFloat.
Run Code Online (Sandbox Code Playgroud)
这是我认为一个非常常见的错误,例如,当从表单元素读取用户输入时,表单控件的value属性是字符串,即使它包含的字符序列表示一个数字(如您的示例中所示).
我所说的"坏部分"是关于+运算符的双重功能,重载用于数字加法和字符串连接.
+运算符将执行的操作完全由上下文确定.只有当两个操作数都是数字时,+运算符才会执行加法,否则它会将所有操作数转换为字符串并进行连接.
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |