当前位置: 首页 > 编程日记 > 正文

Javascript字符串及数组赋值区别

最近做一个分页的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

相关文章:

Linux系统分辨率设置

linux 设置分辨率 如果你需要在linux上设置显示屏的分辨率&#xff0c;分两种情况&#xff1a;分辨率模式存在与分辨率模式不存在&#xff0c;具体如下。 1&#xff0c;分辨率模式已存在 1&#xff09;如何查询是否存在&#xff1a; 图形界面&#xff1a;在System Settings/Dis…

【spring】使用构造方法依赖注入

注 &#xff1a; &#xff08;1&#xff09;使用构造方法依赖注入有两种一种是通过参数顺序一种是按照参数类型的顺序 &#xff08;2&#xff09;所有的依赖注入都必须拥有无参的构造方法&#xff0c;一开始没有添加是因为jvm会自动分配 按照参数的顺序 代码实现&#xff1…

【技术贴】火狐的悬停激活标签扩展插件下载。Tab Focus

火狐专用鼠标悬停激活标签&#xff0c;像360和搜狗浏览器那样的把鼠 标放在标签上&#xff0c;一般都是设置200ms激活此标签。 https://addons.mozilla.org/zh-CN/firefox/addon/tab-focus/ 在组件里可以设置Tab Focus &#xff0c;我都是设置1ms激活。比较爽。

数据结构_顺序栈的代码实践

#include <iostream> using namespace std; #define Maxsize 100//预先分配空间&#xff0c;这个数值根据实际情况预估确定 typedef struct SqStack{int *base;//栈底指针int *top;//栈顶指针 }SqStack;bool InitStack(SqStack &S)//构造空栈 {S.base new int…

C#字符串与享元(Flyweight)模式

写这个文章&#xff0c;主要是因为网上对C#字符串和享元模式的误解比较多。 Flyweight模式 先说这名字&#xff0c;fly呢&#xff0c;就是苍蝇&#xff0c;没错这里面不是飞的意思&#xff0c;是苍蝇的意思&#xff0c;weight大家都知道&#xff0c;就是重量&#xff0c;苍蝇的…

CarTool 使用,获取图片资源

程序&#xff1a;gitHub: 项目地址 使用方法&#xff1a; 1.拿到资源包 在itunes里找到喜欢的应用&#xff0c;然后下载&#xff0c;直接将app拖到桌面。得到一个一个ipa资源包&#xff0c;如图 2.将资源包改成zip格式 3.解压zip资源包&#xff0c;随后打开&#xff0c;显示包…

【spring】p命名空间的使用

1、在xml文件中添加配置 xmlns:p"http://www.springframework.org/schema/p" 2、在xml中进行更改 更改前&#xff08;使用属性依赖注入&#xff09;&#xff1a; 代码实现&#xff1a; <bean id"UserService" class"springboottest.ioc.UserSe…

ARM的位置无关程序设计在Bootloader中的应用

http://www.mcuol.com/tech/107/26052.htm 引言 基于位置无关代码PIC&#xff08;PositionIndependent Code&#xff09;的程序设计在嵌入式应用系统开发中具有重要的作用。 尤其在裸机状态下开发Bootloader程序及进行内核初始化设计&#xff1b;利用位置无关的程序设计方…

CentOS 7 添加系统开机服务

CentOS 7的服务systemctl脚本存放在&#xff1a;/usr/lib/systemd/&#xff0c;有系统&#xff08;system&#xff09;和用户&#xff08;user&#xff09;之分&#xff0c;需要开机不登陆就能运行的程序&#xff0c;存在系统服务里&#xff0c;即&#xff1a;/usr/lib/systemd…

UITableView HeaderView,FooterView 使用SnapKit布局导致约束异常

今天做一个APP里面设置页面(个人中心) 就是一个列表菜单 顶部是一个头像和账户标题, 底部为一个退出登录按钮 当然我第一时间就想到了UITableView, HeaderView, FooterView // 我创建了两个类文件, 用来做UITableView 的header, footer class SettingHeaderView: UIView {//里面…

【spring】专项配置文件的使用

1、编写专项配置文件&#xff08;数据库专项文件&#xff09; 代码实现&#xff1a; mysql-urljdbc:mysql://localhost:3306/test mysql-drivercom.mysql.jdbc.Driver 2、在xml文件里配置contest 代码实现&#xff1a; xmlns:context"http://www.springframework.org…

Ubuntu换回Gnome界面

安装了Ubuntu11.10&#xff0c;Unity界面实在是不怎么习惯。遂换回Gnome。 1. 首先安装Gnome sudo apt-get install gnome-shell sudo apt-get install gnome-tweak-tool 2. 设置自动登录Gnome shell classic sudo /usr/lib/lightdm/lightdm-set-defaults -s gnome-classic  …

Linux设备文件简介。

概述 设备管理是linux中比较基础的东西&#xff0c;但是由于Linux智能程度的越来越高&#xff0c;Udev的使用越来越广泛&#xff0c;使得越来越多的Linux新用户对 /dev 目录下的东西变得不再熟悉。有时候遇见问题就会变得抓狂。 Linux 中的设备有2种类型&#xff1a;字符设备(无…

羊车门问题分析

1、按照你的第一感觉回答&#xff0c;你觉得不换选择能有更高的几率获得汽车&#xff0c;还是换选择能有更高的几率获得汽车&#xff1f;或几率没有发生变化&#xff1f;答&#xff1a;换。2、请自己认真分析一下“不换选择能有更高的几率获得汽车&#xff0c;还是换选择能有更…

python多版本共存使用pip

有时候大家使用python的时候都会用到两个版本&#xff0c;虽说可以独立设置环境变量独立使用&#xff0c;但是用到pip的时候就不行了&#xff0c;python2和python3中的都用相同的pip。在这里我就把我的经验分享给大家。 这是python设置的环境变量 下面是python2的名字 下面是py…

Ruby开发环境

假设您已经安装了Eclipse&#xff0c;那么只需按照如下步骤即可&#xff1a;Please copy the following Update Site URL to your clipboard and then follow the steps listed below to add this URL to your Available Software Sites list. Attempting to access this URL u…

【spring】spel表达式

格式&#xff1a; #{ } 简单使用实例 一、DButil.java 代码实现&#xff1a; package springboottest.ioc.speltest;public class DBUtil {private UserService us;public UserService getUs() {return us;}public void setUs(UserService us) {this.us us;} }二、UserSe…

distinct吃亏记

distinct 是一个去掉重复数据的函数 1.此函数只能在 头部 2.此函数声明后。如果跟两个或两个以上的字段。则会导致。此函数去判断与两个字段都相同的。 例如ID为2 的字段有两个。但是这两个字的的创建时间不同。所有当你想通过DISTINCT ID,CREATTIME来把其中一个ID给筛选的话是…

input 选择框改变背景小技巧

最近在项目中遇到一个问题&#xff0c;想要改变input选择框的背景&#xff0c;然而&#xff0c;令我没有想到的是&#xff0c;竟然无法直接改变背景的颜色 通常情况下&#xff1a;我们都可以通过改变元素的 background-color 的值来改变元素的背景&#xff0c;但是在input选择框…

[转]Android JNI使用方法

本文转自&#xff1a;http://www.open-open.com/lib/view/open1324909652374.html 经过几天的努力终于搞定了android JNI部分&#xff0c;下面将我的这个小程序和大家分享一下。android JNI是连接android Java部分和C/C部分的纽带&#xff0c;完整使用JNI需要Java代码和C/C代码…

【spring】使用eclipse在没网时编写配置文件无法获取提示 解决方法

获得xsd文件 1、打开maven的目录 2、按照该顺序找到spring-context的目录 3、选择最新版本的进入 4、找到context的jar包 5、解压到存放xsd文件的文件夹&#xff08;自己建立&#xff09; 6、按照该顺序进入目录 7、将xsd文件放到cpfhxsd文件的文件夹 将xsd文件配置到ecipse中…

P4568 [JLOI2011]飞行路线

P4568 [JLOI2011]飞行路线 Description Alice和Bob现在要乘飞机旅行&#xff0c;他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务&#xff0c;设这些城市分别标记为0到n-1&#xff0c;一共有m种航线&#xff0c;每种航线连接两个城市&#xff0c;并且航线有…

拿到淘宝offer后的胡思乱想plus面试总结

没想到能拿到淘宝的实习offer&#xff0c;心里还是很激动的。 大三以后就忙着找实习&#xff0c;参加了SAP和淘宝的校招&#xff0c;呵呵&#xff0c;还好&#xff0c;第二次就拿到了offer&#xff0c;剩下还有腾讯和百度的招聘&#xff0c;决定去看看&#xff0c;但是还是要走…

Map与List数据操作

为避免与数据库的多次连接&#xff0c;减少数据库的压力&#xff0c;先将所有的订货数据先从数据库中抽取出来&#xff0c;而后再将数据按门店进行分类汇总以备待用&#xff0c;Map与List混合操作&#xff0c;理解数据结构。提神醒脑哦。以下是原始数据结构&#xff1a;[{store…

《Java虚拟机规范》阅读(三):Class文件格式

每一个Class都对应着唯一的一个类或借口的定义信息。这里&#xff0c;我们称为"Class文件格式"只是通俗的将任意一个符合有效的类或借口的格式这么称呼&#xff0c;但是它并不一定是以磁盘文件的形式存在。 每个Class文件都是由8字节为单位的字节流组成&#xff0c;所…

【spring】自动装配

山顶洞人方法&#xff1a;aotowire UserDao.java 代码实现&#xff1a; public class UserDao {private DBUtil dbu;public DBUtil getDbu() {return dbu;}public void setDbu(DBUtil dbu) {this.dbu dbu;}public void test() {System.out.println(dbu);} }DBUtil.java 代…

扩展jquery实现客户端表格的分页、排序

下面链接中是我用jQuery的扩展来实现的表格分页和排序&#xff0c;使用这个扩展必须加上表头<thead>和<tbody>标签&#xff0c;因为我是 通过<tbody>来进行分页的&#xff0c;要是不加thead&#xff0c;那么表头也要作为分页计算时的一个行了。 下载最新代码…

Win7中如何删除word模板

Win7中如何删除word模板 计算机→本地磁盘c盘→用户→Administrator→AppData→Roaming→Microsoft→Templates转载于:https://blog.51cto.com/ilanni/555302

Spring 学习笔记

Spring 的 Ioc 容器所有的组件都是被动的&#xff08; Passive&#xff09;&#xff0c;所有的组件初始化和调用都由容器负责。组件处在一个容器当中&#xff0c;由容器负责管理。BeanFactory 根据配置文件确定容器中 bean 的实现&#xff0c;管理 bean 之间的依赖关系。通常&a…

【spring】初识aop(面向切面编程) 使用jdk动态代理

BankServiceIImple.java 代码实现&#xff1a; package com.zzxtit.aop;import java.math.BigDecimal;public interface BankServiceImple {public void transfer(String source, String target, BigDecimal money);public void withdraw(String account, BigDecimal money);…