- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在看a talk on JSON hijacking不到 2 分钟,已经有我不熟悉的 JavaScript。
let:let{let:[x=1]}=[alert(1)]
它似乎在 Edge 上工作并且只提醒 1
,但我从来没有遇到过 let:let
语法。我很好奇,我应该如何阅读这篇文章?
最佳答案
视频实际上说它使用 destructuring assignment和 labels .
此代码在 Edge 以外的浏览器中似乎不起作用;所以为了让它在其他浏览器中工作,它需要看起来像这样:
let:{let{let:[x=1]}=[alert(1)]}
为什么?让我们看看 Firefox 的控制台:
SyntaxError: lexical declarations can't appear in single-statement context
错误所指的“单语句上下文”,是let:
开头的部分 — let{let:[x=1]}=[alert( 1)]
。在这种情况下,let
是一个 label。没有其他关键字似乎可以用作标签:
var: while(false); // => SyntaxError: missing variable name
for: while(false); // => SyntaxError: missing ( after for
但是,其中一些有效:
yield: while(false);
async: while(false);
await: while(false);
在strict mode然而,let
和 yield
也会失败,并出现 SyntaxError:
[keyword] is a reserved identifier
。
现在,代码的剩余部分使用解构:
let {
let: [x = 1]
} = [
alert(1)
];
{
}
中的 let
只是表示一个对象属性,这完全没问题。以下是有效的 JS:
let object = {
let: 2,
var: 1,
const: "hello",
while: true,
throw: Error
};
alert(1)
被执行,因此您会看到警报。它的计算结果为 undefined
,因此您有:
let {let: [x = 1]} = [undefined];
现在,它试图获取 [undefined]
的 let
属性,它本身是 undefined
。此外,这一行试图获取该属性的值,并将其进一步解构为一个数组(因此该值必须是一个可迭代对象),其第一个元素的变量名称为 x
,其中默认值 1
。由于[undefined].let
是undefined
,不能解构,所以代码抛出错误:
TypeError: [...].let is undefined
工作 解构可能看起来像这些行之一:
let {let: [x = 1]} = {let: [alert(1)]}; // x is now 1 (default value, since first element in right-hand side is undefined)
let {let: [x = 1]} = {let: [2]}; // x is now 2 (defined due to right-hand side)
两者都不会抛出错误,第一个将1
赋值给x
,因为右侧数组中的第一个元素是未定义
。
部分混淆可能源于嵌套解构,例如以下两个片段:
let {a: {b: {c}}} = {a: {b: {c: 3}}}
let {a: {b: {c = 1}}} = {a: {b: {c: 3}}}
这里,没有创建变量a
或b
,只有c
,也就是后面没有的标识符通过左侧的 :
。后跟 :
的属性名称基本上指示赋值给“在右侧值中找到此属性”。
关于javascript - `let:let{let:[x=1]}=[alert(1)]` 发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49604335/
我如何在 HP Fortify SSC 上定义警报,只有在发现新问题或自上次扫描以来问题数量增加时才会发出警报。 我可以定义一个包含静态问题数量的警报,但每次警报数量发生变化时都需要手动更新,我想避免
由于未知原因,我的 Alert.alert 拒绝工作。我基本上是在重用之前工作的代码。获取错误: Exception NSArrayl length; unrecognized selector se
我的注销用户功能似乎根本不起作用。我在登录时通过警报调用它,但它似乎没有调用它。如果我尝试在末尾添加“()”,它只会给我一个错误。 loginUser = (email, password) => {
alert() 和 window.alert() 函数有什么区别?看起来效果一样。 最佳答案 因为 window 是全局对象,您可以通过简写调用 alert:alert( 'Hello!' ); 或通
我正在尝试整理此错误消息: Exception '-[_NSDisctionary0 length]: unrecognized selector sent to instance 0x7896412
有什么方法可以改变 JavaScript 中alert 或prompt 的外观吗?诸如添加图像、更改字体颜色或大小之类的事情,以及任何会使它看起来不同的事情。 最佳答案 扩展 Matthew Abbo
我正在尝试创建一个警报,以确保用户提交了正确的信息,如果单击“确定”而不是取消,则单击链接并 发送。我几乎已经实现了,警报激活,但如果单击确定则不会激活。不幸的是,我还不是 js 向导...... 编
看起来 AngularJS $window.alert() 和 Javascript alert() 是一样的。在什么条件下我们应该使用其中的哪一个?还是根本没有区别? 最佳答案 这是一回事——Jav
我的应用需要在不同时间向用户显示一些信息。我决定使用 AlertControllers 但我不能同时显示两个 Alert Controllers。因此我需要知道是否显示了警报 Controller ,
在 Brad's tutorial Alerts 组件使用以下方式导出: export default withAlert(Alerts) 这导致了错误: The above error occurr
我正在使用 Twitter Bootstrap 3 并使用 jQuery AJAX 发送表单数据。这是我的代码: $.ajax({ type: $(form).attr('method
我遇到了 的问题(SSL 警报编号 46) 140097325019584:error:14094416:SSL routines:ssl3_read_bytes:sslv3 alert certif
我正在尝试使用 Alert React Native 中的组件以在 Android 和 iOS 之间创建一致的体验。我正在尝试运行示例警报。我导入了警报组件(为简洁起见省略了其他导入): import
考虑这段代码: var input = document.getElementById("hello"); input.addEventListener('blur', function() {
请检查代码, import { Alert, } from 'react-native'; checkForSendingOtp = () => { let hash = 'aBcDeG
我刚开始学习和练习 React Native,我遇到了第一个我自己似乎无法解决的问题。 我有以下代码,非常简单,但是当我在网络上运行时 Alert.alert() 不起作用。如果我单击该按钮,则没有任
在 Safari 浏览器中遇到一个问题,以下是我的场景(带示例)。 当我点击删除帐户的按钮时,我会打开警告消息。在该警报窗口中有两个操作“确定”和“取消”。如果我单击"is",它将重定向到另一个 UR
使用 Cordova CLI 版本 5.4.1,平台是iOS,在 iOS 模拟器上运行 来 self 应用的 onDeviceReady处理程序,我正在调用一个函数来设置一个 Hook ,以便使用 n
我正在使用 selenium IDE。我需要验证在成功填写数据并单击保存按钮后显示的闪现消息。 我正在使用 assertText css=div.alert.alert-success × Succe
我有一个 .pfx 文件,在 Windows 客户端上使用时可以完美连接到远程服务器。我现在想使用 Linux 客户端连接到服务器。 问题 1) 我使用以下 openssl 命令从 pfx 文件中提取
我是一名优秀的程序员,十分优秀!