是否可以在没有with(global)所有脚本默认具有的隐式上下文的情况下执行代码块?例如,在浏览器中,是否可以通过任何方式设置脚本,使诸如
const foo = location;
Run Code Online (Sandbox Code Playgroud)
抛出
未捕获ReferenceError:未定义位置
而不是访问window.location,何时location未先声明?缺少这一点,有没有办法使这种隐式引用导致某种警告?在编写代码时,它可能是错误的来源(见下文),因此有一种防范它的方法可能会很有用。
(当然,由于普通的作用域规则,可以使用const或let或在内部块中声明另一个具有相同名称的变量,以确保使用该变量名称引用的是新变量而不是global属性,但这不是一样。)
这可能类似于询问是否可以从实际 with语句中停止引用属性:
const obj = { prop: 'prop' };
with (obj) {
// how to make referencing "prop" from somewhere within this block throw a ReferenceError
}
Run Code Online (Sandbox Code Playgroud)
众所周知,with不应该首先使用它,但是不幸的是,当谈到时,我们似乎别无选择with(global),因为它偶尔会节省一些字符,但会浪费一些经常弹出的错误:1 2 3 4 5 6。例如:
const foo = location;
Run Code Online (Sandbox Code Playgroud)
(这里的问题:window.status是保留属性-分配给它时,它会将分配的表达式强制转换为字符串)
with阻止或禁止显式使用此类错误的原因相同,但with(global)即使在严格模式下,隐式错误也继续引起问题,因此找出解决方法将非常有用。
我想使用 onerror 来拦截和记录我的 JavaScript 应用程序中发生的所有错误。这按预期工作,除非使用承诺或异步函数。
下面通过剪断抛出的异常fail如预期,但被拦截rejectPromise和throwAsync的不是调用的onerror处理程序总是显示一个Uncaught (in promise) Error控制台?
如何始终拦截使用 promise 和异步函数的代码库中的所有错误?
window.onerror = function(message, source, lineno, colno, error) {
console.log('onerror handler logging error', message);
return true;
}
function rejectPromise() {
return Promise.reject(new Error('rejected promise'));
}
async function throwAsync() {
throw new Error('async exception');
}
function fail() {
throw new Error('exception');
}
rejectPromise().then(() => console.log('success'));
throwAsync();
fail();Run Code Online (Sandbox Code Playgroud)
我正在读"你不懂JS"系列的第二本书,我读过在变量之前函数被提升了.
所以这是代码:
foo(); // 1
var foo;
function foo() {
console.log( 1 );
}
foo = function() {
console.log( 2 );
};Run Code Online (Sandbox Code Playgroud)
这个输出将是1.但为什么呢?首先提升函数,然后提升变量.因此,在我的函数foo(打印1的那个)被提升之后,它必须跟随变量foo.所以结果应该是"未定义"而不是"1".
我希望代码的行为就像它一样:
// hoisted first
function foo() {
console.log( 1 );
}
// hoisted second
var foo; // implicitly initialized to 'undefined'
foo(); // call 'undefined' - error?
foo = function() {
console.log( 2 );
};
Run Code Online (Sandbox Code Playgroud)
这里发生了什么事?
在differentes读数上有很多提及数组是Javascript中特殊的对象类.例如这里:
https://www.codingame.com/playgrounds/6181/javascript-arrays---tips-tricks-and-examples
所以,由于objecta是属性(或键)和值的集合,我在想是否有一种方法可以从一个对象开始并以一个数组结束(从某种意义上说,该方法Array.isArray()返回true该对象模拟一个数组) .我已经开始查看数组属性:
let arr = [0, 1, 2, 3, 4, 5];
console.log(Object.getOwnPropertyNames(arr));
console.log(Array.isArray(arr));Run Code Online (Sandbox Code Playgroud)
所以我尝试使用一个对象来模拟相同的东西:
let arrEmulation = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, "length":6};
console.log(Object.getOwnPropertyNames(arrEmulation));
console.log(Array.isArray(arrEmulation));Run Code Online (Sandbox Code Playgroud)
但Array.isArray(arrEmulation)仍然回归false.首先,我想道歉,如果这是一个愚蠢的问题,但有没有办法我可以手动转换object为array添加特殊属性(或键)?
请注意,我不想知道如何将对象转换为数组,我只想了解哪些特殊的东西可以解释像数组这样的对象.
我有一些表格和按钮来保存它。仅当表单上有未保存的更改(输入)时,才必须启用该按钮。
<form>
<div>
... (inputs)
<span (click)="save()"> Save </span>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
Angular 5中有一些内置的表单脏检查机制吗?实施此方案的最简单方法是什么?
我在使用一些node.js代码时遇到了一些问题,我将其放入AWS Lambda.我需要做几个异步调用,虽然第一个是我期望的行为,但lambda函数在第二个调用完成之前终止.
返回值为null,这让我认为lambda正在触及它的隐式回调,但是我认为它不应该这样做,而有一个尚未解决的承诺.
码:
exports.handle = async function(event, context) {
var AWS = require("aws-sdk");
AWS.config.update({
region: "eu-west-1",
endpoint: "dynamodb.eu-west-1.amazonaws.com"
});
var docClient = new AWS.DynamoDB.DocumentClient();
console.log("Scanning Catalogue...");
var params = {
TableName : "Catalogue"
};
await docClient.scan(params).promise().then(function (data) {
console.log("Scan succeeded.");
data.Items.forEach(function (item) {
//console.log(item.url);
checkIfUpdateRequired(item);
})
})
}
async function checkIfUpdateRequired (catalogueItem) {
var request = require("request-promise");
console.log("Getting " + catalogueItem.url);
await request(catalogueItem.url).then(function(response) {
console.log(response.statusCode);
console.log(response.headers['content-type']);
});
}
Run Code Online (Sandbox Code Playgroud)
日志输出:
START RequestId: 634a55b7-6258-11e8-9f18-6b300c3b5de1 Version: $LATEST
2018-05-28T09:20:44.425Z 634a55b7-6258-11e8-9f18-6b300c3b5de1 Scanning Catalogue...
2018-05-28T09:20:45.446Z …Run Code Online (Sandbox Code Playgroud) 使用正则表达式,我想只选择以下单词:
我对正则表达式并不是很好,但到目前为止,我已经尝试过[^\d\s]*(\d+)(?!.*\1),这使我无法接近所需的输出:(
以下是输入字符串:
I would like abc123 to match but not 123.
ab12s should also match
Only number-words like 1234 should not match
Words containing same numbers like ab22s should not match
234 should not match
hel1lo2haha3hoho4
hel1lo2haha3hoho3
Run Code Online (Sandbox Code Playgroud)
预期比赛:
abc123
ab12s
hel1lo2haha3hoho4
Run Code Online (Sandbox Code Playgroud) 我有一个模块“a”,它导出一个作为null. 这个变量被导入到模块“b”中。
在对初始变量进行一些更改后,我尝试从模块“b”再次访问它,结果发现我获得了原始null值。
这些变量不是作为参考导入的吗?意思是,它们应该反映在运行时稍后对它们所做的任何更改。
// main.js
import * as a from './a.js'
import * as b from './b.js'
// a.js
let test = null
export default test
export function change() {
test = 'test'
console.log(['in a.js change()', test])
}
console.log(['in a.js global', test])
// b.js
import test, { change } from './a.js'
console.log(['in b.js, pre a.change()', test])
change()
console.log(['in b.js, post a.change()', test])
/*
output:
Array [ "in a.js global", null ]
Array [ "in b.js, …Run Code Online (Sandbox Code Playgroud) 我想知道是否有可能获得网站的活动 WebSocket。一个例子是:var x = document.findWebSocket()。websockets 将列在 Chrome 的网络选项卡下(在开发工具部分)。从那里 websockets 列在“WS”下。我也希望能够做到x.emit(..);。
到目前为止,我只能想出var x = new WebSocket("wss://exampleUrl.com/socket.io/?EIO=3&transport=websocket", "protocol1");. 但这只会添加一个新的 Websocket,其 sid 与我想从中发出消息的 sid 不同。
添加“&sid = {SID of Active Websocket}”是行不通的。
假设我有一个这样结构的对象数组
"err": [
{
"chk" : true,
"name": "test"
},
{
"chk" :true
"post": "test"
}
]
Run Code Online (Sandbox Code Playgroud)
我怎样才能像这样重新构建它:
"err": [
{
"post": "test"
"name": "test"
}
]
Run Code Online (Sandbox Code Playgroud)
我试过
arr.filter(obj => delete obj.chk);
Run Code Online (Sandbox Code Playgroud)
它可以成功删除该chk属性,但是如何将两个对象合并?