js中关于value的一个小知识点(value既是属性也是变量)

今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻。

【1】以下这种情况,是常见的情况,会弹出“测试内容”

<input type="button" value="测试内容" onclick = "alert(value)">

【2】心想,这种情况下value找不到,作用域链应该到document了,应该弹出“123",但情况是弹出空

<script>
var value=123;
</script>
<input type="button" onclick = "alert(value)">

【3】value确实是找不到吗?是找的到的。在调试工具下,查看了this的属性,里面有一条是 ‘ value:"" ’   。它的值就是空

<input type="button" onclick = "console.log(this)">

【4】所以value作为input的属性是一直存在的,不存在找不到的情况,赋值了value就是被赋的值,没赋值value就是空。

【5】看一例拓展value伪装兄弟val。val先在input对象上找,没有找到,沿着作用域链在document对象上找,找到弹出123。

<script>
var val=123;
</script>
<input type="button" onclick = "console.log(val)">

【6】还有就是不论val=123被写在前面,而是后面,都能访问到,因为onclick只是事件绑定,等事件真正发生的时候页面早就解析了后面var val=123的代码了。所以不会出错。

<input type="button" onclick = "console.log(val)">
<script>
var val=123;
</script>

【7】但其实把函数放在后面是不靠谱的,如果之间还有其他<script>代码,由于网络原因无法访问到,由于<script>有阻塞作用。会阻塞后面代码,所以会报错。

<input type="button" onclick = "alert(val)">
<script src="http://www.qq.com/test.js"></script>
<script>
var val=123;
</script>

【8】最后一个拓展。如果是一个表单元素,则它的作用域链是 this -> this.form -> document 先<input type="button">对象中寻找username属性,发现没有。然后找到它的父级form,form的username可以找到<input type="text">元素(表单元素可以直接通过name值访问),然后到其value值123

<form action="#">
    <input type="text" name="username" value="123">
    <input type="button" value="btn" onclick = "alert(username.value)">
</form>
时间: 2024-10-05 11:57:24

js中关于value的一个小知识点(value既是属性也是变量)的相关文章

关于 python 类与继承中方法调用 的 一个小知识点记录

(1)D类,多继承于C类与B类,C类与B类继承于A类.C类中没用__init__(), C类的实例化会先寻找第一个继承类是否存在__init__(),也就是B类的__init__().因为python3中使用的是广度优先的方法,寻找路径为D-->B-->C-->A 关于其他方法的继承,也是这个顺序. class A(object): def __init__(self): print("i am A") def call(self): print("A CA

JS中的一些不常用的知识点。

1:delete关键字:只能删除对象的属性 2:typeof 返回的是字符串(当然是对象的类型) 3:分组选择符:如var a=(2,3,4);//结果是4 4:函数.length   ;是指函数形参的集合 5:函数.arguments  ;//是指函数实参的集合. JS中的数据类型:字符串.数字.布尔.对象.null.Undefined. JS中的一些不常用的知识点.,布布扣,bubuko.com

linux下开发,解决cocos2d-x中编译出现的一个小问题, undefined reference to symbol &amp;#39;[email&#160;protected]@GLIBC_2.2.5&amp;#39;

解决cocos2d-x中编译出现的一个小问题 对于cocos2d-x 2.×中编译中,若头文件里引入了#include "cocos-ext.h",在进行C++编译的时候会遇到例如以下错误: undefined reference to symbol '[email protected]@GLIBC_2.2.5'/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command li

复习正则表达式时的一个小知识点

复习正则表达式时的一个小知识点     当分组后,若要引用此小组内容可以有两种方式 1:用 ${1} 2:用 \1 两者效果是一样的

SQL Server 中关于 @@error 的一个小误区

原文:SQL Server 中关于 @@error 的一个小误区 在SQL Server中,我常常会看到有些前辈这样写: if(@@error<>0) ROLLBACK TRANSACTION T else COMMIT TRANSACTION T 一开始,我看见别人这么写,我就想当然的以为它只是个计数器,每当检测到一处错误时,@@error的值+1,不过就因为这个理所当然,所以杯具了... 实际上,它并不是一个计数器,它是一个动态的值,动态的标识最后一条SQL命令执行的结果,如果成功则为0,

post提交与get提交的一个小知识点

今天偶然发现post提交与get提交的一个小知识点,记下来以后可以看看. 将form表单的method的设置为get后,通过url传递的参数将不会被传递到服务器,例如1.ashx?a=123,的a=123在后台就读不出来: 但是如果将method设置为post后,在后台仍然可以读到a=123. post提交与get提交的一个小知识点

MongoDB中对象反序列化的一个小问题

今天在mongoDB存取对象数据的时候,碰到一个小问题:对象的某一个字段类型是抽象类或者接口,在存入的时候没有问题,但是在读取的时候,由于没有具体类的信息,无法完成对象的重新构建,就会报错: Can not construct instance of com.bp.samples.json.generics.xxx, problem: abstract types either need to be mapped to concrete types, have custom deserializ

JS中的内置对象简介与简单的属性方法

JS中的数组: 1.数组的概念: 数组是在内存中连续存储的多个有序元素的结构,元素的顺序称为下标,通过下标查找对应元素 2.数组的声明: ①通过字面量声明var arr1 = [,,,,] JS中同一数组可以储存多种不同的数据类型(但,同一数组一般只用于存放同种数据类型) 例如var arr1 = [1,"2",true,{"name":"啦啦啦"},[1,2]]; ②通过new关键字声明:var arr2 = new Array(参数); &g

js 利用throw 写的一个小程序

在下边的小程序中比较特殊的是使用isNaN()函数判断一个参数是不是数字, 1 <!DOCTYPE html> 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <title></title> 6 7 <script type="text/javascript"> 8 function myFunction() { 9 10 var str = document.getElem