如果我们有一个庞大的字符串,命名str1,说500万个字符,然后str2 = str1.substr(5555, 100)让str2长100个字符,是的一个子str1起始于5555(或任何其他随机选择的位置).
JavaScript如何在str2内部存储?是复制字符串内容还是新字符串是虚拟的,只存储对原始字符串的引用以及位置和大小的值?
我知道这是依赖于实现的,ECMAScript标准(可能)没有定义字符串实现的内幕.但我想知道一些从内部了解V8或SpiderMonkey的专家,以澄清这一点.
谢谢
我是Javascript的初学者.我想写转换例如函数list-style-image来listStyleImage.
我想出了一个功能,但它似乎无法正常工作.有人能指出我这里的问题吗?
var myStr = "list-style-image";
function camelize(str){
var newStr = "";
var newArr = [];
if(str.indexOf("-") != -1){
newArr = str.split("-");
for(var i = 1 ; i < newArr.length ; i++){
newArr[i].charAt(0).toUpperCase();
}
newStr = newArr.join("");
}
return newStr;
}
console.log(camelize(myStr));
Run Code Online (Sandbox Code Playgroud) 哪种方式更有效?有区别吗?
这个:
var str = 'abc';
if(str.length == 20) {
//...
}
if(str.length == 25) {
//...
}
// and so on
Run Code Online (Sandbox Code Playgroud)
或者这一个:
var str = 'abc';
var length = str.length;
if(length == 20) {
//...
}
if(length == 25) {
//...
}
// and so on
Run Code Online (Sandbox Code Playgroud) a=new String("Hello");
Run Code Online (Sandbox Code Playgroud)

a[0]==="H" //true
a[0]="J"
a[0]==="J" //false
a[0]==="H" //true
Run Code Online (Sandbox Code Playgroud)
这是否意味着我只能使用字符串作为char的数组.split("")然后.join("")呢?
答案:是的,在Javascript strings are readonly(又名不变)这个问题的答案如下:
我想使用localStorage存储大量数据(如800GB),根据http://arty.name/localstorage.html,我也使用Firefox,我改变了我的localStorage大小和缓存大小.所以尺寸不是问题.但是,我写了一些jquery,如下所示:
$("a[href]").each(function(){
$(this).click(function(event){
localStorage.test += "somenewinformation";
...
Run Code Online (Sandbox Code Playgroud)
如果这个localStorage.test已经有大量的数据,如400GB,那么存储信息步骤将非常慢.当我点击一个链接时,jquery会等待我完成向localStorage.test附加的新信息,否则它将转到下一页,localStorage.test中的信息将全部丢失或localStorage.test将保持旧的值?我不明白的是,是否会生成一个新线程来执行此操作在后台存储,而在中间关闭浏览器是否会影响它.
对于凌乱的描述感到抱歉,并提前感谢!
JavaScript 字符串是不可变的。这意味着一旦创建了字符串,就无法对其进行修改。但是,仍然可以根据对原始字符串的操作创建另一个字符串
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structs
我理解不可变的含义,但我需要知道他们为什么这样构建它以及这种不可变方法的价值是什么?
注意:我查阅了一些Java 参考资料,但我不是 Java 开发人员,我无法理解其中的术语(StringPool、hashcode ...)
如果默认情况下对象是可变的,为什么在这种情况下它不起作用?如何制作对象“s”中键“a”的变异值?
var s = {
a: "my string"
};
s.a[0] = "9"; // mutation
console.log(s.a); // doesn't workRun Code Online (Sandbox Code Playgroud)
const name = 1;
name = 2;
Run Code Online (Sandbox Code Playgroud)
执行此JavaScript时出现错误:
TypeError: Assignment to constant variable.
at Object.<anonymous> (/home/user01/JavaScript/scope.js:2:6)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:191:16)
at bootstrap_node.js:612:3
Run Code Online (Sandbox Code Playgroud)
但是,在执行以下语句时,代码会成功执行.
const arr = [1,2,3];
arr[1] = 5;
Run Code Online (Sandbox Code Playgroud)
为什么我们能够修改数组,即使它被声明为常量.
我遇到以下代码问题:
function showTableData()
{
var tableArray;
var x = 0;
var theHTML;
for (i = 0; i < 7032; i++)
{
if (x = 0)
{
theHTML = '<tr>' +
'<th scope="row" class="spec">' + partNum[i] + '</th>' +
'<td>' + Msrp[i] + '</td>' +
'<td>' + blah[i] + '</td>' +
'<td>' + blahs[i] + '</td>' +
'</tr>' + theHTML;
x++;
}else{
theHTML = '<tr>' +
'<th scope="row" class="specalt">' + partNum[i] + '</th>' +
'<td class="alt">' + Msrp[i] + '</td>' + …Run Code Online (Sandbox Code Playgroud) 我想知道(希望能确认)JavaScript 是否以写时复制的方式管理其变量。这很重要,因为我最终可能会处理可能很大的字符串,其中很多。
var a, b;
a = $(".foo").html();
b = a;
Run Code Online (Sandbox Code Playgroud)
是b深拷贝还是写时拷贝?我的代码将从写时复制中受益匪浅,因为在某些情况下我设置b为不同的值(即在大多数情况下我复制a,在其他情况下我设置为,例如,"on"或"off"。但是,它不会得到稍后修改。)
javascript ×10
arrays ×3
string ×3
jquery ×2
character ×1
click ×1
const ×1
mutable ×1
mutation ×1
performance ×1
readonly ×1
spidermonkey ×1
substring ×1
v8 ×1