在Javascript中打破嵌套循环的最佳方法是什么?
//Write the links to the page.
for (var x = 0; x < Args.length; x++)
{
   for (var Heading in Navigation.Headings)
   {
      for (var Item in Navigation.Headings[Heading])
      {
         if (Args[x] == Navigation.Headings[Heading][Item].Name)
         {
            document.write("<a href=\"" 
               + Navigation.Headings[Heading][Item].URL + "\">" 
               + Navigation.Headings[Heading][Item].Name + "</a> : ");
            break; // <---HERE, I need to break out of two loops.
         }
      }
   }
}
我正在玩nodejs和mongoose - 尝试在深层注释中找到特定注释,并使用递归函数和foreach进行嵌套.有没有办法阻止nodejs forEach?据我所知,每个forEach迭代都是一个函数而且我不能只做"休息",只能"返回",但这不会阻止foreach.
function recurs(comment){
    comment.comments.forEach(function(elem){
        recurs(elem);
        //if(...) break;
    });
}
既然我们可以throw在Javascript中使用关键字抛出任何内容,那么我们不能直接抛出错误消息字符串吗?
有谁知道这有什么捕获?
让我为此添加一些背景:很多时候,在JavaScript世界中,人们依赖于参数检查而不是使用try-catch机制,所以只抛出致命错误才有意义throw.仍然,为了能够捕获一些系统错误,我必须为我自己的错误使用不同的类,而不是创建Error的子类,我想我应该只使用String.
看起来其他语言支持Try/Catch,开发人员比JavaScript更多地使用该功能.是否有一个原因?Try/Catch的JS实现有缺陷吗?
我已完成阅读并了解Try/Catch块的功能以及使用它的重要性.但我不知道何时/何地使用它们.有什么建议?我将在下面发布我的代码示例,希望有人有时间为我的示例提出一些建议.
    public AMPFileEntity(string filename)
    {
        transferFileList tfl = new transferFileList();
        _AMPFlag = tfl.isAMPFile(filename);
        _requiresPGP = tfl.pgpRequired(filename);
        _filename = filename.ToUpper();
        _fullSourcePathAndFilename = ConfigurationSettings.AppSettings.Get("sourcePath") + _filename;
        _fullDestinationPathAndFilename = ConfigurationSettings.AppSettings.Get("FTPStagePath") + _filename;
        _hasBeenPGPdPathAndFilename = ConfigurationSettings.AppSettings.Get("originalsWhichHaveBeenPGPdPath");
    }
    public int processFile()
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendLine(" ");
        sb.AppendLine("    --------------------------------");
        sb.AppendLine("     Filename: " + _filename);
        sb.AppendLine("     AMPFlag: " + _AMPFlag);
        sb.AppendLine("     Requires PGP: " + _requiresPGP);
        sb.AppendLine("    --------------------------------");
        sb.AppendLine(" ");
        string str = sb.ToString();
        UtilityLogger.LogToFile(str);
        if (_AMPFlag)
        {
            if (_requiresPGP == true) …我在一个项目中发现了以下代码,我不明白。:
get(key, store = null) {
    if (!key) {
      return new Error('There is no key to get!');
    }
    let dbstore = this.localforage;
    if (store !== null) {
      dbstore = store;
    }
    return dbstore
      .getItem(key)
      .then(function(value) {
        return value;
      })
      .catch(function(err) {
        return new Error('The key (' + key + ") isn't accessible: " + err);
      });
  }
为什么return new Error('There is no key to get!');而不是throw new Error('There is no key to get!');?
另外为什么不在catch块中抛出错误?
根据nodejs框架的不同,通常有两种方法来管理错误。
throw new Error('invalid id');)return { 400: 'invalid id' };)由于旧的建议是抛出错误效率低下,我总是尝试返回错误,但我更喜欢抛出错误,因为它们更方便。唯一一篇提到性能影响的文章是 Node v0.1。
这仍然是真的吗?
更新1
Nvm,我意识到我可以自己测试一下。以下代码供参考:
import { performance } from "perf_hooks";
function ThrowException() {
    throw new Error("invalid exception");
}
const _ATTEMPT = 1000000;
function ThrowingExceptions() {
    const p1 = performance.now();
    for (let i = 0; i < _ATTEMPT; i++) {
        try {
            ThrowException();
        } catch (ex: any) {
            // log error
        }
    }
    const p2 = performance.now();
    console.log(`ThrowingExceptions: ${p2 - p1}`);
} …是否有一种下降方式可以使用 try catch 将所有方法包装在现有的 javascript 对象(例如第三方库)中,以便我可以处理异常错误?当然,我将在新接口下公开这些方法。
这是我现在想到的:(将其视为伪代码)
var MyInterface = {};
for (var property in thirdPartyLib) {
  if ((typeof thirdPartyLib[property]) === 'function'){
    MyInterfac[property] = function(){
      try {
        thirdPartyLib[property](arguments)
      }
      catch(err){
         //do my custom processing
      }
    }
  }   
}
//developer use MyInterface object
只是想知道,我的上述想法有更好的方法或任何缺陷吗?谢谢。
javascript ×7
try-catch ×3
.net ×1
break ×1
c# ×1
ecmascript-5 ×1
exception ×1
java ×1
loops ×1
nested-loops ×1
node.js ×1
performance ×1
promise ×1
return ×1
throw ×1