我正在尝试创建一个体面的跨浏览器渲染引擎的画布文本.我注意到kerning对在Chrome中无法正常呈现,但在Safari和Firefox中它们可以正常工作.
铬:
火狐:
苹果浏览器:
试试这里的小提琴:http://jsfiddle.net/o1n5014u/
代码示例:
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.font = "40px Arial";
ctx.fillText("VAVA Te", 10, 50);
Run Code Online (Sandbox Code Playgroud)
有没有人有任何解决方法?我找过bug报告,但找不到任何东西.
我查阅了 JavaScript 的历史,发现 ECMAScript 规范是基于它的。所以 JavaScript 比 ECMAScript 更旧,但似乎后来成为该规范的实现。
所以到目前为止我发现的是:
在 JavaScript 1.8.5 版本之后,我找不到它的任何更高版本号。哪些版本的 JavaScript 实现了 ECMAScript 6 或 7?
我正在尝试向 formData 添加一些数据,如下所示:
params = {'code': 'h1'}
const formData: FormData = new FormData();
formData.append('parameters', JSON.stringify(params));
Run Code Online (Sandbox Code Playgroud)
当我尝试像这样从 formData 获取数据时:formData['parameters']它返回undefined
并且formData.entries.length是0。我查看了一些网站,发现这就是这样做的方法。我究竟做错了什么?
谢谢。
我正在尝试将值推送到数组,但这会将值添加到两个数组a和b.如何确保b不修改数组?
var a=[[1]];
var b= [2];
document.getElementById("1").innerHTML="a[1] "+a[1];
document.getElementById("2").innerHTML="b "+b;
a.push(b);
document.getElementById("3").innerHTML="a[1] "+a[1];
document.getElementById("4").innerHTML="b "+b;
a[1].push([3]);
document.getElementById("5").innerHTML="a[1] "+a[1];
document.getElementById("6").innerHTML="b "+b+" < why did this value changed?";Run Code Online (Sandbox Code Playgroud)
<div id="1"></div>
<div id="2"></div><br />
<div id="3"></div>
<div id="4"></div><br />
<div id="5"></div>
<div id="6"></div><br />Run Code Online (Sandbox Code Playgroud)
如何转换此字符串以获取1000000?问题是我总是得到10000:
console.log(parseFloat('10.000.000,00'.replace('.', ',').replace(/,(?=[^,]*$)/, '.')),'test');Run Code Online (Sandbox Code Playgroud)
有什么建议么?
任何人都可以告诉我为什么以及1+ +"2"+3JavaScript中的表达式如何产生6,这也是一个数字?我不明白在两个+运算符之间引入单个空格如何将字符串转换为数字.
我有一个测试项目,我在其中测试类型定义文件。该项目有一个名为的文件index.ts,如下所示:
import i18nFu = require("gettext.js");
Run Code Online (Sandbox Code Playgroud)
该gettext.js包是如何使用Node.js这样的安装:npm install gettext.js
VS Code 为上面的行显示以下错误消息:
找不到模块“gettext.js”的声明文件。
'SOME_PATH/gettext.js' 隐式具有 'any' 类型。
尝试'npm install @types/gettext.js'(如果它存在)或添加一个包含“declare module 'gettext.js';”的新声明(.d.ts)文件
安装@types/gettext.js模块确实可以解决问题。但我很好奇,所以我并没有就此止步。我@types/gettext.js再次删除了模块并尝试自己创建声明文件。
我types/gettext.js在我的项目文件夹中创建了一个子文件夹,并将旧node_modules/@types/gettext.js文件夹的内容复制到其中。我还在typeRoots我的tsconfig.json文件中添加了一个条目,所以它看起来像这样:
{
"compilerOptions": {
"lib": ["ES2017"],
"module": "commonjs",
"strict": true,
"target": "es5",
"typeRoots": ["./types", "./node_modules/@types"],
},
"files": ["test.ts"]
}
Run Code Online (Sandbox Code Playgroud)
但错误信息不会消失。用(如错误消息所建议的)替换types/gettext.js/index.d.ts文件的内容(您可以在此处看到declare module 'gettext.js')确实可以消除错误。但这不是拥有类型的解决方案。我错过了什么?
PS:我对解决诸如使用ts-ignore或设置noImplicitAny为false.
我经常有这样的字符串文字类型:
const supportedLanguageTags = [
"de-at",
"de-ch",
"de-de",
"en-gb",
"en-us",
] as const;
type LanguageTag = typeof supportedLanguageTags[number];
function isSupportedLanguageTag(tag: string): tag is LanguageTag {
return (supportedLanguageTags as unknown as string[]).includes(tag);
}
Run Code Online (Sandbox Code Playgroud)
在这里,我使用数组来定义类型,但也能够检查文字类型中是否包含随机字符串。
但是我真的不喜欢类型断言。您有摆脱它的建议吗?
一种解决方案是使用对象而不是数组,如下所示:
const supportedLanguageTags = {
"de-at": 1,
"de-ch": 1,
"de-de": 1,
"en-gb": 1,
"en-us": 1,
};
type LanguageTag = keyof typeof supportedLanguageTags;
function isSupportedLanguageTag(tag: string): tag is LanguageTag {
return tag in supportedLanguageTags;
}
Run Code Online (Sandbox Code Playgroud)
但在这里我不喜欢为每个对象属性定义一个随机值。
当我在控制台上运行此代码时:
(function test(){
console.log(function(){}.apply.length);
})();Run Code Online (Sandbox Code Playgroud)
输出是: 2
我读到了函数长度.我理解MDN上的函数长度部分.但我不明白这一点.功能中没有参数.为什么输出2?
假设我有以下用户定义的类型保护函数,用于检查值是否为上面的数字1000:
function isBigNumber(something: unknown): something is number {
return typeof something === "number" && something > 1000;
}
Run Code Online (Sandbox Code Playgroud)
然后我这样使用它:
const strOrNum: string | number = "asdf";
if (isBigNumber(someVar)) {
console.log(someVar * 10); // works because of type-guard
} else {
// here type of strOrNum is "string" and no longer "string | number"
}
Run Code Online (Sandbox Code Playgroud)
strOrNum我的问题是Else 块中的类型。
看起来类型防护检查类型,并且 TS 还使用类型防护来缩小 Else 块的类型范围,在本例中这不是我想要的。类型防护是否仅用于检查类型,而没有传递给它们的值的附加信息?
isBigNumber是否有解决方案,无需更改to的返回类型并且不必再次检查 If 语句的boolean类型?strOrNum
javascript ×6
typescript ×4
.d.ts ×1
apply ×1
arrays ×1
canvas ×1
fonts ×1
form-data ×1
function ×1
kerning ×1
typeguards ×1