最近做一个分页的javascript程序,需要先将tbody下面的tr标签全部删除,然后再append新的tr,使用下面的代码

var trs=$d("tbdoys").getElementsByTagName("tr");
    for(var j=0;j<trs.length;j++){
        $d("tbdoys").removeChild(trs[j]);

但是发现tbody在removeChild的时候,trs.length也实时的减小,导致tbody只能删除一半,bing一通,发现以下的博文,主要是讲:Javascript将字符串赋值给某变量是是值赋值,而将数组赋值给某变量时,是引用赋值,

最后采用了比较歪门邪道的方法,实现了功能。

var trs=$d("tbdoys").getElementsByTagName("tr");    

for(var j=0;j<trs.length;j=0){
        $d("tbdoys").removeChild(trs[j]);
}

以下是博文地址及博文

http://www.crazycoder.cn/Javascript/Article45710.html

Javascript是门弱类型语言声明变量不需要声明其类型var x 就可以等于任何类型 
比如: 
var str = "...."; 
var arr = ["this","is",".gif' />"]; 
var obj = {name:"caizhongqi",age:26,sex:"male"}; 
这些都是正确这似乎非常简单方便但是这种方便也会带来些令人难于捉摸意外看看下面例子(例1): 
<script> var x = "this is "; 
var y = x; 
x="ni hao"; 
alert(y) 
</script> 
你可能下子知道alert出来就是“this is 没错但对于用Java语言员来说var y=x 应该是把x在存储器中地址(指针)赋给y变量才对因此他们觉得应该alert出“ni hao”才会更符合Java语言习惯但JavaScript语言不是这样赋值是直接量操作直接把数据copy给y存储空间 
再看看下面例子(例2): 
<script> 
var x = ["hello"] // 这是只有个元素并且该元素为串类型 
var y = x; 
x[0] = "world"; 
alert(y[0]); 
</script> 
如果你还以为alert出来是“hello”那就错了当 var y = x 时x不是已经把它给了y吗?但事实上却不是这样 当 var y = x 时x传是它在存储器中地址(指针)!x[0]="world" 修改了在原存储位置上数据因此alert(y[0])就是拿x新值出来alert混乱了吧?如何会儿是直接量会儿是引用量呢? 
不急下面例子将更加混乱(例3): 
<script> 
var x = ["hello"] // 这是只有个元素并且该元素为串类型 
var y = x; 
x = ["ni","hao"]; // x 将变成个新 
alert(y[0]); 
</script> 
眼睛告诉你alert出来是“hello”!这让人捉摸不透古灵精怪JavaScript! 
周星驰国产零零漆中有类似幕: 
当星爷刚从深圳到香港执行任务时袁咏仪从他行李中发现个吹头发风筒星爷说这其实是个须刨把皮鞋拿出来看却是个风筒个貌似大哥大电话玩意其实又是个须刨须刨和风筒把袁咏仪和观众都搞混乱了哈哈哈哈这是我很喜欢部片次看时肚子都笑痛了 
回过头来再看看刚才变量赋值直接量和引用量使用就好像须刨和风筒换来换去把我们都搞晕了 
其实问题出在对x第 2次赋值 x = ["ni","hao"] 上我们看看变量在存储器上变化以及JavaScript在对待串类型和对象类型区别: 
我们观察下面两种情况: 
var x = "this is ..."; 
var y = ["this","is",""]; 
x和y区别的处在于类型javascript解析器把串直接赋值(其实就是copy)给x(直接量)却把指针赋给y(引用量)切都是瞬间全自动!结合下面可能会更好地理解:

图中p1、p2...就是变量指针上面 var y 中y存就是Object类型变量指针p1(假设)而x存放就是串本身再分析下例3执行 var x = ["hello"] 时解析器就在内存上开辟块存储空间放这个而 x 就拿到了这个空间地址(指针)再执行 x = ["ni","hao"] 时解析器又新开辟块存储空间放这个新而x就是这个新存储空间指针这也就是说JavaScript 里变量重定义(或重新赋值)将会新开辟块存储空间而没有销毁原来空间;回过头来再看例2x[0] = "world"这句没有给x新定义值没有新开辟存储空间只是修改了它存储空间里面数据因此例2最后alert出来就是“world”;例1是串赋值全过程是直接量操作 
从上面分析可以看出JavaScript 变量可以存储直接量也可以存储指针这是没办法被人工干扰因此在日常编码中就需要注意这些问题比如大串连接循环里面赋值等细节就能直接影响到执行效率 
看看两个例子: 
var _tmpStr=""; 
var str = "this is big ..."; 
for (i=0; i<100; i){ 
_tmpStr  a; 

a = _tmpStr; 
串操作使用直接量每次循环都要操作大非常笨重效率低下如果改用引用量操作即通过
var str = "this is big ..."; 
var _tmpArray = 
for (i=0; i<100; i){ 
_tmpArray[i]=str; 

str = _tmpArray.join(""); 
做个测试假如有个100k用直接量连接操作机器上需要约2600毫秒如果用连接则需要150毫秒效率相差十几倍 
好久没写这么长文章了花了我大半天时间

转载于:https://www.cnblogs.com/zhanghw0354/archive/2012/01/18/2325754.html

Javascript字符串及数组赋值区别相关推荐

  1. JavaScript:字符串与数组

    字符串 字符串就是零个或多个排在一起的字符,放在单引号或双引号之中 'itbaizhan' "itbaizhan" 单引号字符串的内部,可以使用双引号.双引号字符串的内部,可以使用 ...

  2. JavaScript字符串、数组、对象方法总结

    字符串方法 示例字符串: const str = "hello,kitty,hello,vue "; 一.基本方法 charAt() 返回指定索引的字符 startsWith() ...

  3. html javascript 字符串和数组互转 字符串拼接 数组拼接

    <!DOCTYPE html> <!DOCTYPE html> <html lang="en"> <head><meta ch ...

  4. 一个数组赋值给另一个数组

    把一个数组赋值给另一个数组 JavaScript把一个数组赋值给另一个数组 python把一个数组赋值给另一个数组 JavaScript把一个数组赋值给另一个数组 把数组map的内容全部赋值给另一个数 ...

  5. JavaScript中字符串数组赋值失败,不是每个字符串,却是字符。

    我的处女作<Canvas系列教程>在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作. 教程介绍.教程目录等能在README里查阅. 传送门:https: ...

  6. 【JavaScript 笔记 】— 基础语法(数据类型、字符串、数组、对象、Map、Set、iterable、函数基础)

    JavaScript个人笔记 数据类型和变量 浮点数的相等比较 null 和 undefined == 与 === strict模式 字符串 模板字符串 字符串常用方法 数组 数组常用方法 对象 条件 ...

  7. JavaScript中的 inludes 和 indexOf 方法 | 判断字符串或数组中是否存在对应的元素| 相同点与不同点 | 代码详解

    目录 JavaScript中的inludes和indexOf方法 1.数组中的includes和indexOf方法比较 1.1 函数返回值的不同 1.2 函数第二个参数--开始查找的位置 1.3 in ...

  8. JavaScript中的数组与伪数组的区别

    在JavaScript中,除了5种原始数据类型之外,其他所有的都是对象,包括函数(Function). 基本数据类型:String,boolean,Number,Undefined, Null 引用数 ...

  9. JavaScript中的数组和字符串

    知识内容: 1.JavaScript中的数组 2.JavaScript中的字符串 一.JavaScript中的数组 1.JavaScript中的数组是什么 数组指的是数据的有序列表,每种语言基本上都有 ...

最新文章

  1. 《微软-统一沟通-UC 2013》-1-部署-基础架构-2-Add a domain controller
  2. 下载keep运动软件_我把私教带回了家,Keep智能动感单车体验|钛极客
  3. 用CRF做命名实体识别——NER系列(三)
  4. SAP Business Application Studio和SAP云平台Destination
  5. hdu1018--Big Number
  6. 【java】父类与子类的引用赋值关系
  7. word2010画布复制混乱
  8. 电脑显示苹果5s未连接服务器怎么办啊,iphone5s数据线连接不上电脑怎么办【解决方法】...
  9. PostgreSQL 12:新功能和增强功能
  10. Travel(HDU 4284状压dp)
  11. BI的价值体现在哪里
  12. php round函数输出不对_PHP第一章-变量
  13. msu文件无法运行_如何打开msu文件
  14. 2021-07-28 cad贱人工具箱5.8
  15. BPM平台为企业“增值”
  16. Android通过蓝牙获取设备的通讯录、通话记录等
  17. ROS中usb摄像头的使用_(usb_cam)
  18. 笔记本打开腾讯会议显示未检测到可用摄像头,但是系统自带相机可以使用
  19. 前端传输JSON格式数据 居然尾随了一个等于号...
  20. linux-patch用法

热门文章

  1. 两步完成项目定时启动,java项目定时启动
  2. 实现SSTab单个选项卡代码
  3. /etc/profile ,/etc/bashrc ,~/.bash_profile,~/ .bashrc 区别与联系
  4. 多版本python共存,安装三方库到指定python版本 多Python版本和虚拟环境
  5. 光谱投影颜色感知器件与围栅多桥沟道晶体管技术
  6. 计图MPI分布式多卡
  7. PyTorch全连接ReLU网络
  8. 适用于CUDA GPU的Numba 随机数生成
  9. 【注意事项】论文/申报书格式
  10. java爬取验证码图片_JAVA HttpClient实现页面信息抓取(获取图片验证码并传入cookie实现信息获取)...