例如Number("Infinity")
返回,Infinity
因为它将其识别为数字类型,所以我想知道Number("NaN")
返回是否出于与返回NaN
相同的原因,还是因为它将其识别为数字,就像“无穷大”一样?Number("potato")
NaN
例如:
function makeFunc(a,b,c,d,e) {
return () => {
if (a) { /* do something expensive not referencing b,c,d,e */ }
if (b) { /* do something expensive not referencing a,c,d,e */ }
if (c) { /* do something expensive not referencing a,b,d,e */ }
if (d) { /* do something expensive not referencing a,b,c,e */ }
if (e) { /* do something expensive not referencing a,b,c,d */ }
}
}
const func = makeFunc(true, false, false, false, false)
for ( let i=0; i < 100_000; i++) func()
我希望,在这个例子中,V8 能够优化if (x)
闭包上的测试,只发出
/* do something expensive not referencing b,c,d,e */
if (a)
执行100,000次之后。
我正在尝试使用节点、路径和 fs 将文件写入现有目录。
它应该如何工作:
- 初始化模拟数据。
- 循环模拟数据。
- 将模拟字符串写入现有目录“输出”
- 结束程序。
工作原理:
- 初始化模拟数据。
- 循环模拟数据。
- 尝试写入现有目录。
- 产量误差:
错误:
throw new Error(`Error writing: ${err.message}`);
^
Error: Error writing: ENOENT: no such file or directory, open 'C:\Users\username\test\cheerio\output\55-207-0-228_2025-04-29_15:27:51.txt'
at C:\Users\username\test\cheerio\components\WriteFile.js:31:11
at node:fs:2385:7
at FSReqCallback.oncomplete (node:fs:188:23)
存储库
我正在使用这个存储库。处理 node:fs writefile 的函数位于/component/WriteFile.js;它在这里被调用,就在这些行中。
项目树
这是项目结构:
project-root/
├── components/
├── node_modules/
├── output/ // Target for file write.
├── .gitignore
├── index.js
├── LICENSE
├── package-lock.json
├── package.json
└── README.md
WriteFile 代码片段
为了方便起见,这里发布相关代码。WriteFile.js
const fs = require('node:fs');
const path = require('path');
const makeFile = async (fileName, { contentString, ip }) => {
const now = new Date();
const dateString =
now.getFullYear() +
'-' +
String(now.getMonth() + 1).padStart(2, '0') +
'-' +
String(now.getDate()).padStart(2, '0') +
'_' +
String(now.getHours()).padStart(2, '0') +
':' +
String(now.getMinutes()).padStart(2, '0') +
':' +
String(now.getSeconds()).padStart(2, '0');
contentString = `DATE: ${dateString}\nFor ip: ${ip}\n${contentString}`;
const filepath = path.join(
__dirname,
'..',
'output',
`${fileName}_${dateString}.txt`
);
try {
await fs.writeFile(filepath, contentString, 'utf16le', (err) => {
if (err) {
throw new Error(`Error writing: ${err.message}`);
}
});
return 'Success';
} catch (error) {
console.error('\nError:\n', error.message, '\n');
} finally {
// Code that will run regardless of try/catch result
// Remember, don't have a return in finally.
console.log('Final completed.');
}
};
module.exports = { makeFile };
调用时间:
调用地址为:
async function main() {
let start = performance.now();
let elapse;
i = 0;
for (const ip of ipList) {
i++;
if (i > 3) {
break;
}
const sleep = (ms) =>
new Promise((resolve) => {
setTimeout(resolve, ms);
});
await sleep(500);
await makeFile(ip.replaceAll('.', '-'), {
contentString: 'Mockdata',
ip: ip
});
}
elapse = performance.now() - start;
console.log('Total time elapsed: ', elapse / 1000);
}
在我的 React Native 应用中,我遇到了 setState 函数未被识别为函数的问题。
我已经在应用程序根页面插入了上下文提供程序并导出了上下文属性,但它仍然不起作用。
我试图在组件上调用它,但仍然收到“setAppCompany 不是一个函数”
App.js
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import AppProviders from './mobile/src/providers/AppProviders';
import Route from './mobile/src/navigations/Route';
import Layout from './mobile/src/layout/Layout';
export default function App() {
return (
<AppProviders>
<NavigationContainer>
<Layout>
<Route />
</Layout>
</NavigationContainer>
</AppProviders>
);
}
AppProviders.js
import React from 'react';
import CompanyProvider from '../contexts/CompanyContext';
import UserProvider from '../contexts/UserContext';
const AppProviders = ({ children }) => {
return (
<CompanyProvider>
<UserProvider>{children}</UserProvider>
</CompanyProvider>
);
};
export default AppProviders;
CompanyContext.js
import React, { createContext, useState, useContext } from 'react';
export const CompanyContext = createContext();
export default function CompanyProvider({ children }) {
const [appCompanyId, setAppCompany] = useState(null);
return (
<CompanyContext.Provider value={(appCompanyId, setAppCompany)}>
{children}
</CompanyContext.Provider>
);
}
export const useCompany = () => {
const context = useContext(CompanyContext);
const { appCompanyId, setAppCompany } = context;
return { appCompanyId, setAppCompany };
}
UserContext.js
import React, { createContext, useState, useContext } from 'react';
export const UserContext = createContext();
export default function UserProvider({ children }) {
const [logged, setLogged] = useState(false);
const [userId, setUserId] = useState(null);
const [token, setToken] = useState('');
const [admin, setAdmin] = useState(false);
return (
<UserContext.Provider
value={
(logged, setLogged, userId, setUserId, token, setToken, admin, setAdmin)
}>
{children}
</UserContext.Provider>
);
}
export function useUser() {
const context = useContext(UserContext);
const {
logged,
setLogged,
userId,
setUserId,
token,
setToken,
admin,
setAdmin,
} = context;
return {
logged,
setLogged,
userId,
setUserId,
token,
setToken,
admin,
setAdmin,
};
}
TopBar.js(使用上下文属性的组件)
import React, { useState, useEffect } from 'react';
import { View, StyleSheet, Text } from 'react-native';
import { Picker } from '@react-native-picker/picker';
import { getCompaniesByUserId } from '../services/api/company.services';
import { useUser } from '../contexts/UserContext';
import { useCompany } from '../contexts/CompanyContext';
const TopBar = () => {
// Hooks ------------------------------------->
const { userId } = useUser();
const { setAppCompany } = useCompany();
const [selectedCompany, setSelectedCompany] = useState(null);
const [avaliableCompanies, setAvailableCompanies] = useState([
{ idEmpresa: 1, nomeEmpresa: 'Rooftop Bar' },
{ idEmpresa: 2, nomeEmpresa: 'Restaurante Brilhante' },
]);
useEffect(() => {
if (avaliableCompanies == null)
setAvailableCompanies(getCompaniesByUserId(userId));
if (avaliableCompanies != null && selectedCompany == null)
setSelectedCompany(avaliableCompanies[0]);
}, [avaliableCompanies, selectedCompany, userId]);
useEffect(() => {
if (selectedCompany != null) setAppCompany(selectedCompany);
}, [selectedCompany, setAppCompany]);
// JSX ------------------------------------->
return (
<View style={styles.topBar}>
<Text style={styles.title}>RoofStock</Text>
<View style={styles.selectorContainer}>
<Text style={styles.label}>Company:</Text>
<Picker
selectedValue={selectedCompany}
onValueChange={setSelectedCompany}
style={styles.picker}
dropdownIconColor="#fff">
{avaliableCompanies.map((company) => (
<Picker.Item
label={company.nomeEmpresa}
value={company.idEmpresa}
/>
))}
</Picker>
</View>
</View>
);
};
我尝试在创建的上下文中使用 setState 函数,但失败了。我原本希望使用 setState 函数来控制和管理基于这些数据的应用程序状态。
我正在尝试为一个游戏创建一个网格,并且设置好了网格,但是当我使用 for 循环显示所有单元格时,出现了一个错误 - Uncaught TypeError: Cannot convert undefined or null to object。我认为网格数组中存在未定义的内容,但实际上不应该存在。另一种解释是,网格是空的,尽管它应该有 16 个单元格。
let bgCol = '#A6A6A6';
let rows = 4;
let cols = 4;
let grid = [];
let size = 50;
function setup() {
createCanvas(windowWidth, windowHeight);
background(bgCol);
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
grid.push(new Cell({x: r * size, y: c * size}, 0));
}
}
}
function draw() {
background(bgCol);
for (let g of grid) {
grid[g].dis();
}
}
class Cell {
constructor(pos, num, col = '#FFFFFF') {
this.pos = pos;
this.num = num;
this.col = col; // White as placeholder until later
}
dis() {
stroke('#000000');
strokeWeight(2);
fill(this.col);
square(this.pos.x, this.pos.y, size, 5);
if (this.num) {
textSize(size - 5);
text(this.num, this.pos.x + 5, this.pos.y + 5);
}
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.11.0/p5.js"></script>
我们目前正在探索向用户显示带有时区的时间戳,并决定采用该Intl.DateTimeFormat
选项timeZoneName: "shortOffset"
,但我们现在注意到不同语言之间的值是不同的。
当我在 Chrome 中运行此代码片段时,以不同的语言打印时区:
["it-IT", "da-DK", "de-DE", "en-GB", "es-ES", "pl-PL", "fr-FR", "sv-SE", "nl-NL", "nb-NO", "el-GR", "fi-FI", "pt-PT", "cs-CZ", ].forEach((l) => {
const tz = Intl.DateTimeFormat(l, {
timeZone: "Asia/Kolkata",
timeZoneName: "shortOffset",
})
.formatToParts(new Date())
.find((p) => p.type === "timeZoneName").value;
console.log(l, tz);
});
我得到这个结果:
语言 | 时区 |
---|---|
信息技术 | 格林威治标准时间+5:30 |
达-DK | 格林威治标准时间+5.30 |
去-DE | 格林威治标准时间+5:30 |
英文 | 格林威治标准时间+5:30 |
es-ES | 格林威治标准时间+5:30 |
聚磷酸酯 | 格林威治标准时间+5:30 |
fr-FR | UTC+5:30 |
SV-SE | 格林威治标准时间+5:30 |
nl-NL | 格林威治标准时间+5:30 |
nb-NO | 格林威治标准时间+5:30 |
el-GR | 格林威治标准时间+5:30 |
FI-FI | UTC+5.30 |
pt-PT | 格林威治标准时间+5:30 |
cs-CZ | 格林威治标准时间+5:30 |
因此,由于某种原因,法语和芬兰语使用标签 UTC,而所有其他测试的语言都使用 GMT。
我真的很想知道这背后的原因。有没有什么文档或数据库可以让我找到不同语言的配置Intl.DateTimeFormat
?
我在尝试在鼠标点击事件发生时切换并向元素添加类时遇到了问题。同样,我有多个“li”元素。我想将“class = subdrop active”添加到选定的锚点标签,并将“class = active”添加到后续的 li 标签。我不确定我是否正确处理了类操作。有人能建议一下正确的方法吗?
<li class="submenu">
<a href="javascript:void(0);">
<i class="ti ti-layout-dashboard"></i>
<span>Admin Profile</span>
<span class="menu-arrow"></span>
</a>
<ul>
<li>
<a href="<?php echo base_url('admin_dashboard'); ?>">Dashboard</a>
</li>
<li>
<a href="<?php echo base_url('admin_profile'); ?>">Profile</a>
</li>
<li>
<a href="#">Settings</a>
</li>
<li>
<a href="#">Contacts</a>
</li>
</ul>
</li>
尝试在选定的 li 点击上获取以下结果
<li class="submenu">
<a href="javascript:void(0);" class="subdrop active"><i class="ti ti-layout-dashboard"></i><span>Admin Profile</span><span class="menu-arrow"></span>
</a>
<ul>
<li><a href="<?php echo base_url('admin_dashboard'); ?>" class="active">Dashboard</a></li>
<li><a href="<?php echo base_url('admin_profile'); ?>">Profile</a></li>
<li><a href="#">Settings</a></li>
<li><a href="#">Contacts</a></li>
</ul>
</li>
根据 React FE 项目的 Sentry 设置指南
import * as Sentry from "@sentry/react";
Sentry.init({
dsn: "SOME_SENTRY_DNS",
// Setting this option to true will send default PII data to Sentry.
// For example, automatic IP address collection on events
sendDefaultPii: true
});
const container = document.getElementById(“app”);
const root = createRoot(container);
root.render(<App />);
我已经调整为
const SENTRY_DSN = process.env.REACT_APP_SENTRY_DSN;
const SENTRY_ENV = process.env.REACT_APP_SENTRY_ENVIRONMENT || "development";
Sentry.init({
dsn: SENTRY_DSN,
environment: SENTRY_ENV,
sendDefaultPii: true,
debug: true,
autoSessionTracking: false,
beforeSend(event) {
console.log("Sentry about to send event:", event);
return event;
},
});
但仍然不断
Sentry Logger [warn]: Discarded session because of missing or non-string release
我用它useEffect
来获取数据。这些数据会被传递给一个状态,然后作为组件的 prop 进行相应的渲染/填充。以下是可以运行的代码:
const [projects, setProjects] = useState([]);
useEffect(() => {
const q = query(collection(db, "projects"), orderBy("update", "desc"));
const unsubscribe = onSnapshot(q, (QuerySnapshot) => {
const fetched = [];
QuerySnapshot.forEach((doc) => {
fetched.push({ ...doc.data(), id: doc.id });
});
const sortedProjects = fetched.sort((a, b) => a.update - b.update);
setProjects(sortedProjects);
});
return () => unsubscribe;
}, []);
上面的代码正确地获取了数据,然后将其传递给一个组件,该组件随后使用 map 显示项目列表。为了简化流程,我想看看是否可以对简历数据做同样的处理。代码如下:
const [edu, setEducation] = useState([]);
useEffect(() => {
const q = query(
collection(db, "resume/resume/education"),
orderBy("startDate")
);
const unsubscribe = onSnapshot(q, (QuerySnapshot) => {
const fetched = [];
QuerySnapshot.forEach((doc) => {
fetched.push({ ...doc.data(), id: doc.id });
});
const sortedEdu = fetched.sort(
(a, b) => a.startDate.nanoseconds - b.startDate.nanoseconds
);
setEducation(sortedEdu);
});
return () => unsubscribe;
}, []);
这个不知为何不起作用。我检查了数据是否正在被检索(确实如此),并且useEffect
和useState
似乎正常工作。我甚至在组件中添加了登录信息,数据确实从登录端显示了出来,但仍然出现 map 错误,提示数组未定义,导致 React 无法渲染。我还知道,当我尝试直接输入数据时,这些组件是可以正常工作的。这可能是什么原因造成的?
我直接复制粘贴了这些值,然后调整了一下,问题依然存在。为了清晰起见,以下是问题组件:
export const ResumeItemLister = ({ items, sectionTitle }) => {
return (
<div>
<h2 className="text-xl text-left">{sectionTitle}</h2>
<hr />
<table>
{items.map(({ title, location, date, bullets }) => (
<tr className="pt-10">
<div className="grid grid-cols-3">
<td className="text-left">{date}</td>
<td className="col-span-2">
<div className="text-left">
{title ? (
<p>
<bold className="font-bold">{title}</bold>, {location}
</p>
) : (
<p>{location}</p>
)}
<ul>
{bullets.map((text) => (
<li className="list-disc list-inside"> {text}</li>
))}
</ul>
</div>
<br />
</td>
</div>
</tr>
))}
</table>
</div>
);
};
只要我在父组件中明确设置了这些项,就可以正常工作。但是,使用获取到的状态,我得到:
Uncaught TypeError: Cannot read properties of undefined (reading 'map')
我理解这意味着 items 未定义,但正如我提到的,情况并非如此。任何帮助我都非常感谢。
我访问的一个网站有一个过于敏感的脏话过滤器,它会在诸如 doc.u.ments 或 as.sas.sin 之类的单词中间添加句号。没有关闭脏话过滤器的选项。我想用类似 Ublock Origin 之类的工具来去除单词中间的句号。我不知道最好的方法是什么。
我首先尝试了这个:##+js(replace-node-text, #text, ".", "")
它不仅清理了单词中间的句号,还删除了所有常规的句子结尾句号。
于是我尝试了这个:##+js(replace-node-text, #text, /[.][az]+/, "")
但这只会把 doc.u.ments 变成:doc.ments,这不是我想要的。我想知道有没有人有什么想法。