相关疑难解决方法(0)

在JavaScript中创建GUID/UUID?

我正在尝试在JavaScript中创建全局唯一标识符.我不确定所有浏览器上有哪些例程,"随机"和内置随机数生成器的种子等等.

GUID/UUID应至少为32个字符,并应保持在ASCII范围内,以避免传递它们时出现问题.

javascript uuid guid

3915
推荐指数
46
解决办法
166万
查看次数

在 Javascript 中制作函数的真实副本

我想在 Javascript 中定义两个函数(或类),它们具有完全相同的函数体,但它们是完全不同的对象。用例是我在主体中有一些通用逻辑,它是多态的(函数可以接受多种类型),但是通过只调用具有单一类型的函数,函数最终会更快,我假设因为 JIT 可以在每种情况下都采取更快乐的快速路径。

一种方法是简单地完全重复函数体:

function func1(x) { /* some body */ }
function func2(x) { /* some body */ }
Run Code Online (Sandbox Code Playgroud)

另一种以较少重复完成相同事情的方法是eval()

function func(x) { /* some body */ }
function factory() { return eval("(" + func.toString() + ")") }
let func1 = factory(), func2 = factory()
Run Code Online (Sandbox Code Playgroud)

eval()当然,缺点是任何其他工具(缩小器、优化器等)都完全出乎意料,并且有可能破坏我的代码,因此这不起作用。

在标准工具链(我使用 Typescript、esbuild 和 Vite)的范围内,是否有任何明智的方法可以做到这一点,而不使用技巧eval()或只是复制粘贴代码?我也有关于类定义的类似问题。


编辑:总结评论中发生的事情:

  1. 是的,性能差异是真实且可衡量的(尤其是在 Chrome 上,在 Firefox 和 Safari 上不那么明显),正如这个微基准所证明的那样。引发这个问题的真实程序要大得多,性能差异也更明显,我怀疑是因为 JIT 可以为单态函数做更多的内联,这会产生许多连锁反应。
  2. 返回闭包的明显解决方案不起作用,即
    function factory() { function func() { /* some body …
    Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

18
推荐指数
2
解决办法
485
查看次数

在 Storybook 中制作故事时,Template.bind({}) 中是否需要有 {}

最近我开始学习React Storybook。在下面的示例中,当我不写入时{}Template.bind({})故事书将运行得很好,不会出现任何错误。但我发现很多人在制作故事时都会使用{}in Template.bind({})

问: Storybook 制作故事时需要有{}内部吗?Template.bind({})

import React from 'react'
import { MyButton } from './MyButton'

export default {
    title :  'MyButton',
    component : MyButton
};

const Template = (args) => <MyButton {...args}/>

export const Primary = Template.bind()
Primary.args = {
    variant: 'primary',
    label: 'button'
}
Run Code Online (Sandbox Code Playgroud)

reactjs storybook

9
推荐指数
2
解决办法
6100
查看次数

如何使用这些Node模块通过文件或URL接受HTML,然后输出JSON作为现有HTML元素的验证?

基本上我需要做的是获取一个本地grader.js文件,然后在命令行使用它来输入HTML,然后将输出JSON数据到控制台以验证是否存在多个HTML元素.用法看起来像这样:

./grader.js --checks checks.json --file index.html
./grader.js --checks checks.json --url http://google.com
Run Code Online (Sandbox Code Playgroud)

使用的Node模块是Commander(用于在命令行工作),Cheerio(用于HTML)和Restler(用于从URL获取HTML).

checks.json文件是简单的,它的根本要求,检查是否有一些简单的HTML元素的存在,以查明他们是否在页面上存在:

["h1",
 ".navigation",
 ".logo",
 ".blank",
 ".about",
 ".heading",
 ".subheading",
 ".pitch",
 ".video",
 ".thermometer",
 ".order",
 ".social",
 ".section1",
 ".section2",
 ".faq",
 ".footer"]
Run Code Online (Sandbox Code Playgroud)

grader.js文件是事情变得更加复杂.以下代码实际上是有用的,因为它采用命令行参数,并指示HTML元素是否存在的true或false值.但是在底部添加URL检查后它无法正常工作.我的checkURL功能有问题以及我使用底部的Commander代码实现它的方式.即使真值和假值依赖于我使用的HTML文件/ URL是正确的,我最终也会将两个检查都吐出到控制台,即使我只想检查文件或URL,而不是两者.我对此很新,所以我很惊讶它的功能完全正常.它可能与默认值有关,但是当我尝试进行这些更改时,checkURL函数似乎会崩溃.在此先感谢您的帮助,我真的很感激.

#!/usr/bin/env node
var fs = require('fs');
var program = require('commander');
var cheerio = require('cheerio');
var rest = require('restler');
var HTMLFILE_DEFAULT = "index.html";
var CHECKSFILE_DEFAULT = "checks.json";
var URL_DEFAULT = "http://cryptic-spire-7925.herokuapp.com/index.html";

var assertFileExists = function(infile) {
    var instr = infile.toString();
    if(!fs.existsSync(instr)) { …
Run Code Online (Sandbox Code Playgroud)

javascript json html-parsing node.js

5
推荐指数
1
解决办法
1270
查看次数

是否可以禁用 iframe 内容的控制台输出?

我的页面中有几个包含第三方内容的 iframe,它们抛出各种错误等。它们工作得很好,这不是我的内容,所以不是我的问题。我可以阻止他们将内容记录到控制台中,以便我可以专注于我的代码吗?如果这样的功能应该是特定于浏览器的,那么 Firefox 或 Chrome 都适合我。

javascript iframe firefox google-chrome

5
推荐指数
1
解决办法
3592
查看次数