我正在从一本名为“Eloquent Javascript”的书中学习 JavaScript
我正在尝试解决这里描述的练习:http : //eloquentjavascript.net/04_data.html#h_nSTX34CM1M
我设法确定此代码有效:
function arrayToList(array) {
var list = null;
for (var i = array.length - 1; i >= 0; i--)
list = {
value: array[i],
rest: list
};
return list;
}
console.log(arrayToList([1, 2, 3]));
Run Code Online (Sandbox Code Playgroud)
结果:{值:1,休息:{值:2,休息:{值:3,休息:空}}}
到目前为止,一切都很好,根据这本书,这是正确的解决方案。但!
当我尝试运行相同的东西但使用更长的数组时,让我们说:
console.log(arrayToList([1, 2, 3, 4, 5]));
Run Code Online (Sandbox Code Playgroud)
结果是:{ value: 1, rest: { value: 2, rest: { value: 3, rest: [Object] } } }
为什么是这样?我的代码错了吗?
我将尝试一步一步地学习Express库和Node.js.首先我要看的是Node reqiure(moduleName)函数的细节.
我看了一下这个文档,并在示例文档中找到了一些奇怪的代码:
const circle = require('./circle.js');
console.log( `The area of a circle of radius 4 is ${circle.area(4)}`);
Run Code Online (Sandbox Code Playgroud)
更具体地说是${circle.area(4)}位.
根据我的理解,$在JavaScript中就像任何其他变量一样.当我们在客户端Web开发中使用它时,它被用作文档功能的委托(我认为).使用节点时分配的是什么?
最重要的是,这种语法意味着什么? ${circle.area(4)}
如果$只是对某个函数的引用someFunction(),那么它不等同于此someFunction(){cirle.area(4)}.我没有看到这可能是有效的语法.
另外,他们为什么不直接直接调用circle.area()函数呢?
javascript node.js ecmascript-6 template-strings template-literals
我需要在每次调用后返回递增整数的实体.
例如,我有代码.
var id = 0; //global variable =(
function foo() {
....
console.log("Your unique ID is " + id++);
....
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.但我想使用发电机来完成这项工作.
就像是:
function* getId() {
var id = 0;
while (true) {
yield id++;
}
}
function foo() {
....
console.log("Your unique ID is " + getId());
....
}
Run Code Online (Sandbox Code Playgroud)
但结果只是空图引号.我错过了什么?也许使用发电机对于这类发电来说是一个坏主意?
我有一个'自定义'目录,我想存储对内置对象原型的任何更改.每个被修改的内置对象都有自己的文件(即custom/String.js任何修改String.prototype).
除了这些文件之外,我还将调用一个文件custom/All.js来导出要使用的自定义功能.
All.js
export * from './String'
export {Multiply} from './Array'
Run Code Online (Sandbox Code Playgroud)
main.js
import * from './custom/All'
Run Code Online (Sandbox Code Playgroud)
String.js
// something like this
export String.prototype.doSomething = function() {}
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?
在 Global.js 模块中:
export let transLog = [];
Run Code Online (Sandbox Code Playgroud)
主要内容:
import * as G from "./Global";
G.transLog = [];
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
app.js?c99e:19 Uncaught TypeError: Cannot set property q of #<Object> which has only a getter
at eval (app.js?c99e:19)
at Object.<anonymous> (bootstrap e92860b74eb6dd40b159:62)
at __webpack_require__ (bootstrap e92860b74eb6dd40b159:19)
at bootstrap e92860b74eb6dd40b159:62
at bootstrap e92860b74eb6dd40b159:62
Run Code Online (Sandbox Code Playgroud)
网络包配置:
const webpack = require('webpack');
module.exports = {
entry: './js/app.js',
plugins: [
new webpack.SourceMapDevToolPlugin({
filename: "[file].map"
})
],
output: {
filename: './dist/app.js'
},
devtool: 'source-map'
};
Run Code Online (Sandbox Code Playgroud)
那么,如何修改其他模块中的变量呢?
我一直试图弄清楚嵌套的ES6解构是否支持这种功能.a如果它不存在,我想指定为空对象,然后将其属性名称分配给b范围变量b.
var {
a = {},
a: {
b = 2,
},
} = {};
VM40:4 Uncaught TypeError: Cannot destructure property `b` of 'undefined' or 'null'.
at <anonymous>:6:5
Run Code Online (Sandbox Code Playgroud)
在没有假设对象格式的情况下,我似乎无法真正嵌套解构.以下工作,但我正在寻找一个更简洁的方法,您可以轻松地看到原始对象的嵌套布局.
var {
a = {},
} = {};
var {
b = 2,
} = a;
// works as expected
// starts to look crazy when 'forking' branches that may or may not exist
Run Code Online (Sandbox Code Playgroud) 在我的项目中,我使用 promise(下面的代码)pending,当我使用 keyword 时,该 promise 怎么可能await。有人可以帮我弄清楚,我做错了什么吗?
const getTs = async () => {
const response = await axios.get('...')
.then(res => res.data)
.catch(() => 'ERROR');
return response;
};
console.log(getTs()); // Promise { <pending> }Run Code Online (Sandbox Code Playgroud)
我是async等待和承诺的初学者.我阅读了一些文章并观看了一些教程视频,但我仍然无法完全理解它.所以我有一个我现在正在处理的代码
}).then(function() {
var responseArray = []
[url1,url2,url3,url4].forEach((url)=>{
makeRequest(url)
}).then((response)=>{
responseArray.push(response)
})
return responseArray
})
Run Code Online (Sandbox Code Playgroud)
因此,如预期的那样,responseArray空的返回.我需要让它等到每个makerequest(url)的所有响应都被推送到responseArray.
这是我的尝试
}).then(function() {
var responseArray = []
[url1,url2,url3,url4].forEach((url)=>{
async makeRequest(url)
}).then((response)=>{
await responseArray.push(response)
})
return responseArray
})
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决这个问题吗?
我想net::Ipv4Addr::LOCALHOST在模式匹配时使用常量过滤掉 IPv4 localhost 地址:
use get_if_addrs; // 0.5.3
use std::net;
fn main() -> std::io::Result<()> {
assert_eq!(
"127.0.0.1".parse::<net::Ipv4Addr>().unwrap(),
net::Ipv4Addr::LOCALHOST
);
{
let ifaces = get_if_addrs::get_if_addrs().unwrap();
for iface in ifaces {
match iface.addr {
get_if_addrs::IfAddr::V4(get_if_addrs::Ifv4Addr {
ip: _,
netmask: _,
broadcast: None,
}) => (),
get_if_addrs::IfAddr::V4(get_if_addrs::Ifv4Addr {
ip: net::Ipv4Addr::LOCALHOST,
netmask: _,
broadcast: _,
}) => (),
get_if_addrs::IfAddr::V4(addr) => println!("{:?}", addr),
get_if_addrs::IfAddr::V6(_) => (),
}
}
}
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
use get_if_addrs; // 0.5.3
use std::net;
fn main() -> std::io::Result<()> { …Run Code Online (Sandbox Code Playgroud) 问题出在handleLineEnd函数中。我撕掉了所有不需要显示问题的线条。
没有这条线:我可以在 ctx 上绘制多个矩形。
使用该线:每个矩形都会被下一个矩形覆盖。
该代码在旧版 Chrome (118.0.5993.71) 中运行良好,而在版本 119.0.6045.106 中则无法运行
function handleLineEnd(evt) {
{
startDrawing = false;
var dummy = ctx.getImageData(3, 3, 5, 5); // problem line
ctx.drawImage(canvaslayer, 0, 0);
ctxlayer.clearRect(0, 0, el.width, el.height);
}
}
Run Code Online (Sandbox Code Playgroud)
function handleLineEnd(evt) {
{
startDrawing = false;
var dummy = ctx.getImageData(3, 3, 5, 5); // problem line
ctx.drawImage(canvaslayer, 0, 0);
ctxlayer.clearRect(0, 0, el.width, el.height);
}
}
Run Code Online (Sandbox Code Playgroud)
var el = document.getElementById("canvasID");
var elcontainer = document.getElementById("containerID");
var ctx = el.getContext('2d');
var startpuntX, startpuntY, …Run Code Online (Sandbox Code Playgroud)javascript ×9
ecmascript-6 ×6
node.js ×3
async-await ×2
es6-modules ×2
promise ×2
canvas ×1
console.log ×1
foreach ×1
generator ×1
getimagedata ×1
html5-canvas ×1
ip-address ×1
rust ×1