在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.
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在玩nodejs和mongoose - 尝试在深层注释中找到特定注释,并使用递归函数和foreach进行嵌套.有没有办法阻止nodejs forEach?据我所知,每个forEach迭代都是一个函数而且我不能只做"休息",只能"返回",但这不会阻止foreach.
function recurs(comment){
comment.comments.forEach(function(elem){
recurs(elem);
//if(...) break;
});
}
Run Code Online (Sandbox Code Playgroud) 既然我们可以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) …
Run Code Online (Sandbox Code Playgroud) 我在一个项目中发现了以下代码,我不明白。:
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);
});
}
Run Code Online (Sandbox Code Playgroud)
为什么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}`);
} …
Run Code Online (Sandbox Code Playgroud) 是否有一种下降方式可以使用 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
Run Code Online (Sandbox Code Playgroud)
只是想知道,我的上述想法有更好的方法或任何缺陷吗?谢谢。
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