每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object,几乎破坏了任何对象上的所有循环?
以TJ Holowaychuk的should.js为例.他增加了一个简单的getter来Object,一切工作正常(来源).
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});
Run Code Online (Sandbox Code Playgroud)
这真的很有道理.例如,可以扩展Array.
Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)
是否有任何反对扩展本机类型的论据?
如何将字节数组转换为字符串?
我发现这些功能正好相反:
function string2Bin(s) {
var b = new Array();
var last = s.length;
for (var i = 0; i < last; i++) {
var d = s.charCodeAt(i);
if (d < 128)
b[i] = dec2Bin(d);
else {
var c = s.charAt(i);
alert(c + ' is NOT an ASCII character');
b[i] = -1;
}
}
return b;
}
function dec2Bin(d) {
var b = '';
for (var i = 0; i < 8; i++) {
b = (d%2) + b;
d …Run Code Online (Sandbox Code Playgroud) 在 Python 3 中,我可以这样做:
>>> "€13,56".encode('utf-16')
b'\xff\xfe\xac 1\x003\x00,\x005\x006\x00'
Run Code Online (Sandbox Code Playgroud)
输入是一个(unicode)字符串,而输出是该字符串以 utf-16 编码的原始字节序列。
我怎样才能在 JavaScript 中做同样的事情——从一个(unicode)字符串,到一个Uint8Array以 utf-16 编码的字符串的原始字节序列(也许是一个?)?
我已经使用了react-native-image-picker,现在我从照片库中选择图像。要将图像发送到 API,我必须首先将其转换为 Base64,然后转换为字节数组。我的文件路径位于response.uri 中。我该怎么做?
当我执行 console.log(response) 时,我得到了这个结果
'Response = ', {
fileSize: 6581432,
longitude: -17.548928333333333,
uri: 'file:///Users/shubhamb/Library/Developer/CoreSimulator/Devices/B58314DF-F0A9-48D2-B68A-984A02271B72/data/Containers/Data/Application/63143214-8A03-4AC8-A79C-42EC9B82E841/tmp/2AACBC57-0C07-4C98-985E-154668E6A384.jpg',
fileName: 'IMG_0003.JPG',
latitude: 65.682895,
origURL: 'assets-library://asset/asset.JPG?id=9F983DBA-EC35-42B8-8773-B597CF782EDD&ext=JPG',
type: 'image/jpeg',
height: 2002,
width: 3000,
timestamp: '2012-08-08T18:52:11Z',
isVertical: false,
}
Run Code Online (Sandbox Code Playgroud) 我需要在 NodeJs 中执行 Java 函数。
string.getBytes()
Run Code Online (Sandbox Code Playgroud)
在 Java 中,这会将字符串转换为字节数组byte[]。
我知道这个问题以不同的方式提出,但我找不到适合本地反应的正确答案......
如何将字符串转换为字节数组我本机反应?
例如我希望这个函数是这样的:
StringToByteArray('你好')
输出应该是这样的: [72,0,101,0,108,0,108,0,111,0]
我一直在看这篇文章,但答案似乎不正确或无效......
我试图在浏览器(例如 Chrome)中获取数字和字符串的实际大小(以字节为单位)。
我了解到,在 JavaScript 中,数字以双精度表示,占用 64 位,而字符串是 UTF-16 代码单元,因此需要 2 个字节或 4 个字节。
我第一次尝试使用new Blob,但它将字符串组成字符编码为 UTF-8 而不是 UTF-16。我知道 Node 中有一个Buffer.fromAPI,但它在浏览器环境中不可用。
我的问题是如何从浏览器(例如 Chrome)获取数字和字符串的实际大小(以字节为单位)?
我有一些字符串需要是一个UTF-16文本文件.例如:
var s = "aosjdfkzlzkdoaslckjznx";
var file = "data:text/plain;base64," + btoa(s);
Run Code Online (Sandbox Code Playgroud)
这将导致UTF-8编码文本文件.如何获得带字符串的UTF-16文本文件s?
我需要重新编写从js到c#的东西,利用js中的btoa方法对一串unicode字符进行转换,将它们转换为base64.但是,据我所知,javascrpt使用的编码与c#中可用的编码不同.我需要编码完全相同,并且不会在这些语言中返回不同的值.我已经尝试设置一个nodejs服务器并向它发出get请求,以便以这种方式运行编码,但这太慢而且不稳定.我的印象是我需要创建自己的编码表,但我不知道从哪里开始或如何实现它.如果有人可以提供帮助,那将非常感激.
tl; dr:javascript的btoa返回的值不同于c#中的base 64编码.我需要它是相同的价值观.
代码和输出:
c#:
String fromChar = new
String(247,71,186,8,125,72,2,1.0078125,0.003936767578125);
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(fromChar);
Console.WriteLine(System.Convert.ToBase64String(plainTextBytes));
output = w7dHwroIfUgCAQA=
javascript:
var x = btoa(String.fromCharCode(247,71,186,8,125,72,2,1.0078125,0.003936767578125);
console.log(x)
output =
90e6CH1IAgEA
Run Code Online (Sandbox Code Playgroud)
我知道前一个例子使用utf8编码,而js没有,问题是.net中没有与javascript编码匹配的编码.
编辑:试图比较c#和javascript的字节数组,但问题是btoa函数使用了一个未命名的编码,所以我实际上无法获得字节来打印它的字节数组而不假设它是像utf8那样的不是.
javascript ×7
node.js ×3
react-native ×2
utf-16 ×2
.net ×1
c# ×1
casting ×1
converters ×1
encoding ×1
java ×1
prototype ×1
unicode ×1