在自己做东西时,遇见了一个问题。就拿博客园的首页右边的搜索举例吧,用控制台操作。

现在我需要从另外一个地方将数据传给input,让其在一刷新的时候就显示数据。

这不难啊,于是我按照我的理解做了

代码如下:

此时,id为zzk_q的值应该为 测试 ,即input框内应该显示 测试 。但结果。。

咦,为什么没有变呢,不对啊,又来来回回变着法子试一下,还是不行,当然代码基本还是那样子的。突然想起我以前遇见过这样子的问题,仔细回想当时解决的方法(看样子当时没理解透,只是找到方法就过去了),想起来了,我试一下,代码如下:

看结果:

这次成了。第一次遇见这个问题时没有细想,成功了就跳过了。但这次我开始想为什么呢?为什么呢?怎么会这样啊,没办法理解啊。然后我自己在哪里来回折腾,但还是想不明白。同样是赋值这俩者有什么差别吗?差别在哪里啊?后来才知道是值类型和引用类型,当然是别人给我指出来的(……)。

然后我就去找这方面的东西看,发现这东西我看过,汗。

自1997年Javascript被标准化以来,它定义了六种基本类型。直到ES6,JS程序中任何一个值都属于以下几种类型之一。

•Undefined

•Null

•Boolean

•Number

•String

•Object

不过,ES6又加了一个基本类型:Symbol 类型。这个没多大了解,不作讨论,等以后熟悉再说吧,又要学。

在JavaScript的变量中,有俩种类型的值:基本类型和引用类型的值。基本类型值(也有人称为值类型)是简单地数据段,它是按值访问的,并对其中的值进行操作。而引用类型值值那些有可能有多个值构成的对象。赋值的时候,解释器必须确定值是基本类型还是引用类型。

基本数据类型有:Undefined、Null、Boolean、Number、String。引用类型是保存在内存中的对象,即Object,对象是方法和属性结合。

1.类型值的动态属性

这是引用类型:

var person = new Object();

person.name = "foo";

console.log(person.name);//foo

delete person.name;

console.log(person.name)://undefined

这个例子中,我们先创建了一个空对象,然后将其保存在person变量中,然后给对象添加了一个属性name,而且给这个属性赋值了一个字符串“foo”,然后输出,可以看到输出了字符串foo,然后我们将这个属性删除,输出undefined。这些说明,我们可以动态的给对象添加属性和方法,如果不销毁对象或者删除属性,将会一直存在。

这是基本类型:

var name = "foo";

name.age = 22;

console.log(name.age);//undefined

在这个中,我们将一个字符串"foo",保存在一个name变量中,然后也给它添加了一个属性age,并赋值22,然后输出,像我以前想的那么该输出22,但实际情况是undefined。

这个是否可以理解为基本类型的值是不可变的,而引用类型是可以动态改变的。

2.复制变量值

和上面说的一样,基本类型是按值访问的。而引用类型呢,在JavaScript和其它语言不同,允许直接访问内存中的位置,也就是说我们不可以直接操作对象的内存空间,那怎么办呢?在操作对象时,实际上是对操作对象的引用,引用类型的值是按引用对象访问的。引用类型的存储需要内存的栈内存和堆内存共同完成,栈内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。

先看例子:

var num1 =5;

var num2 =num1;//5

num1+=1; //6

num2;//5

从一个变量向另一个变量复制基本类型的值,我们会在变量对象上重新创建一个新值,然后把该值复制到新变量分配的位置上。这俩个值是完全对立的,对俩个变量进行其他操作是互不影响的。它们应该是保存在栈内存中,如下图所示:

看一下引用类型:

var obj1 = new Object();

var obj2 = obj1;

obj1.name = "foo";

console.log(obj2.name); //foo

obj2.age = 22;

console.log(obj1.age); //22

当从一个变量想另一个变量复制引用类型的的值时,也会将该值复制一份放到新的空间中。但是就跟上面说的一样,引用类型的存储要栈内存和堆内存一起完成,这个值实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,俩个变量实际上是同一个指针,也就是引用同一个对象。所以,改变其中的一个变量,另一个变量也会随之改变。如下图:

参看 JavaScript高级程序设计。

这样一梳理,就对一开始的问题有些明白了,开头那个错误,一开始,取到input的value(此时为空),复制给title,然后以改变title期望改变input的value。但input的value(可以看成一个变量)就是一个基本类型,复制后,它俩完全独立了,互不影响。再说成功的,将value拿出来,先将input(对象)复制给title,然后给title添加value属性,并赋值,此时俩个指向同一个对象,改变一个,也会影响另外一个。恩,就这样子。

虽然很多知识从书上或其他地方看了一遍或多遍,但是等你真正遇到时感觉好奇怪。怎么会这样,然后自己去找答案。等找到或是别人指出后,才发现这个以前看见过,有些甚至自己解决过(不能说解决,只能说没有深究,没有彻底弄懂)。还有一些大学的基础都忘的七七八八了(本来就学的不好)。连栈内存和堆内存都去搜了一下。恩,既然决定走这条路了,就好好学习吧。

最后:

Good good coding,day day up!

PS:(集合和引用类型、基本数据类型赋值不一样)一个简单的java问题 先后的赋值问题

Listlist = new ArrayList();

person pp = new person();

list.add(pp);

pp.setIvalue(12);

pp.setIvalue(20);

pp = null;;

int b = 0;

int a = b;

b = 8;

System.out.println(a);

for (person ppp : list) {

ppp.getIvalue();

}

list里面的对象加进去就改不了,但是可以修改对象里面的属性值。

简单string里面的值就改变不了

结果:

11

8888

切记:最好还是按正常来写,避免混淆

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php js给input的赋值,JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题_javascript技巧...相关推荐

  1. JavaScript基本类型值和引用类型值的复制问题

    参考JavaScript高级程序设计(JS红宝书) 一.基本类型值的复制 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上(注意,这里为新变 ...

  2. html控制浏览器全屏,JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件_javascript技巧...

    HTML 5中的full screen,目前可以在除IE和opera外的浏览器中使用 ,有的时候用来做全屏API,游戏呀,等都很有用.先看常见的API element.requestFullScree ...

  3. php 判断联通移动电信,JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)_javascript技巧...

    正则表达式判断所填入号码的运营商js代码修改版:http://www.jb51.net/article/31563.htm 在做WEB项目时,有时候需要根据用户的输入手机号码判断该号的运营商是移动.联 ...

  4. 用JavaScript 控制input的值

    用JavaScript 控制input值的限制,非常简单的例子, input框里面只能输入0-100的数字,不能是字母.汉字,也不能是负值. 如果输入了大于100的数字会自动变成100. <!D ...

  5. JS:1.什么是JavaScript?

    1,什么是JavaScript? javascript 一,什么是? 是一门 源于Java,基于对象,使用在客户端,由浏览器执行的脚本语言. 源于Java --- 语法与java类似 基于对象 --- ...

  6. js进阶正则表达式14验证邮编(input的pattern属性)(正则表达式加起^始$)

    js进阶正则表达式14验证邮编(input的pattern属性)(正则表达式加起^始$) 一.总结 1.input的pattern属性:里面可以直接放正则表达式,<input type=&quo ...

  7. elementui中给input框赋值成功后input框不能进行编辑问题

    选中一项后,input框不能进行编辑 <el-select v-model="input.memoStyle" placeholder="Log Landlord ...

  8. 通过JS代码动态生成HTML表格(Table),Input框,Button按钮.并且通过Input框的值进行查询动态生成数据填写在指定的表格里

    本人公众号上线啦!!! 公众号与博客名一样:没有腹肌的程序猿 公众号文章类型:工作上所遇到的需求实现方案分享. 此外也会提供一些数据集供大家使用.(这个还在规划中,毕竟打工人时间挺紧的,哈哈哈哈) 到 ...

  9. JavaScript控制input输入框的required属性值

    JavaScript控制input输入框的required属性值 当我们在勾选上一个复选框之后,希望该选项的输入框成为必填项时,那么将会用到required这个属性 在HTML中,required为属 ...

最新文章

  1. 指针数组、数组指针、数组的区别与联系
  2. mxnet基础到提高(36)-单层神经网络
  3. nginx配置设置,使部分页面访问跳转到404页面
  4. A - Sliding Window POJ - 2823
  5. Codrops 优秀教程:基于 CSS3 的全屏网页过渡特效
  6. centos7配置python3_Centos7安装并配置Python3环境
  7. vmware通过vCerter Converter Standalone实现不同VC的V2V虚拟机迁移
  8. 4. Spring Boot 过滤器、监听器
  9. 中国联通公布8月运营数据出炉 4G用户大幅度提升
  10. mac好用的图片转文字,ocr文字识别工具:Text Scanner
  11. java 常用报表控件_常用的Java开源报表工具汇总
  12. Exce批量发送邮件功能:发件人设置的操作
  13. 由于哈希冲突,不同值的对象也可能具有相同的哈希值
  14. Kubernetes 中的 requests 和 limits详解
  15. MarkDown图床助手: 截图-传图-生成url 一步到位
  16. Mybatis的批量插入数据库的两种方法及代码自动生成工具的使用方法
  17. 如何对CAD绘图区域进行设置?
  18. 如何进行移动端页面开发
  19. java web 实践项目(搭建web留言系统)
  20. angular.js-服务-http-路由(5)

热门文章

  1. A-LOAM代码结构分析
  2. ARM编程中的警告和错误处理
  3. Linux查看系统资源占用
  4. A02 守望先锋作品
  5. LeetCode——1947. 最大兼容性评分和(Maximum Compatibility Score Sum)[中等]——分析及代码(Java)
  6. 大数据系列教程001-初识大数据
  7. SDIO——读写SD卡
  8. Unity LeapMotion入门
  9. 嵌入式开发模块]AD转换芯片ADS8344驱动模块16位分辨率,程序实例
  10. 半导体材料 MOOC学习记录 第十章 III-V族化合物半导体