在尝试通过一个表达式分配对象值时如何避免或抑制代码异常
How does one avoid or suppress code exceptions while trying to assign an object value via exactly one expression
我确实是 JavaScript 的新手,我正在尝试为我的对象字段分配一个值。该值来自另一个对象,但必须修改该值。如果值为 null 它会崩溃,所以我需要一个 try-catch 块,但我不知道该怎么做。
var marker = new google.maps.Marker({
...
this_one: parseInt(clients[i].fields.SomeFieldOfMyObject.replace('.', '')),
...
});
我想将一些可能类似于 "54.2" 的值转换为 (int) 54。 但是有些对象具有 SomeFieldOfMyObject null 并且我的应用程序崩溃了。
我正在寻找类似的东西:
this_one: function() {
try:
return parseInt(clients[i].fields.SomeFieldOfMyObject.replace('.', ''))
catch:
return 0 }
您可以使用 IIFE 到 运行 函数,您可以在其中测试解析值的结果并使用 try/catch
.
this_one: (function() {
try {
let val = parseInt(clients[i].fields.SomeFieldOfMyObject.replace('.', ''));
return isNaN(val) ? 0 : val;
} catch (e) {
return 0;
}
})()
我将以名称 (@learner123) 命名 OP,并给出一些关于 try...catch
用法的其他想法。有利也有弊。一些人认为 try-catch
必须在性能关键函数和循环内避免。有些人会暗示人们应该始终以可读代码为目标(作为不必更改代码以通过警卫或大量 if ... else
语句进行检查的赞成论据)。因此,由于人们已经知道代码会在何处以及出于何种原因失败,因此人们可能更喜欢 防御性编程 方法...
this_one: (() => {
// always assure a string value ... (null || '').
const str = (clients[i].fields.SomeFieldOfMyObject || '');
// do not forget to pass the radix to `parseInt`.
const num = parseInt(str.replace('.', ''), 10);
return Number.isNaN(num) ? 0 : num;
})()
我确实是 JavaScript 的新手,我正在尝试为我的对象字段分配一个值。该值来自另一个对象,但必须修改该值。如果值为 null 它会崩溃,所以我需要一个 try-catch 块,但我不知道该怎么做。
var marker = new google.maps.Marker({
...
this_one: parseInt(clients[i].fields.SomeFieldOfMyObject.replace('.', '')),
...
});
我想将一些可能类似于 "54.2" 的值转换为 (int) 54。 但是有些对象具有 SomeFieldOfMyObject null 并且我的应用程序崩溃了。
我正在寻找类似的东西:
this_one: function() {
try:
return parseInt(clients[i].fields.SomeFieldOfMyObject.replace('.', ''))
catch:
return 0 }
您可以使用 IIFE 到 运行 函数,您可以在其中测试解析值的结果并使用 try/catch
.
this_one: (function() {
try {
let val = parseInt(clients[i].fields.SomeFieldOfMyObject.replace('.', ''));
return isNaN(val) ? 0 : val;
} catch (e) {
return 0;
}
})()
我将以名称 (@learner123) 命名 OP,并给出一些关于 try...catch
用法的其他想法。有利也有弊。一些人认为 try-catch
必须在性能关键函数和循环内避免。有些人会暗示人们应该始终以可读代码为目标(作为不必更改代码以通过警卫或大量 if ... else
语句进行检查的赞成论据)。因此,由于人们已经知道代码会在何处以及出于何种原因失败,因此人们可能更喜欢 防御性编程 方法...
this_one: (() => {
// always assure a string value ... (null || '').
const str = (clients[i].fields.SomeFieldOfMyObject || '');
// do not forget to pass the radix to `parseInt`.
const num = parseInt(str.replace('.', ''), 10);
return Number.isNaN(num) ? 0 : num;
})()