在尝试通过一个表达式分配对象值时如何避免或抑制代码异常

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;
})()