js赋值 怎么传值赋值

js赋值 怎么传值赋值,第1张

要说js的赋值方式时首先要说明js的数值类型:基本类型和引用类型。

1、基本类型

基本的数据类型有:undefined,boolean,number,string,null。 基本类型存放在栈区,访问是按值访问的,就是说你可以 *** 作保存在变量中的实际的值。

当基本类型的数据赋值时,赋得是实际的值,a和b是没有关联关系的,b由a复制得到,相互独立。(字面量的才是基本类型)

var a=10;

var b=a;

consolelog(a+','+b);    // 10,10

a++;

consolelog(a+','+b)  // 11,10

2、引用类型

引用类型指的是对象。可以拥有属性和方法,并且我们可以修改其属性和方法。引用对象存放的方式是:在栈中存放对象变量标示名称和该对象在堆中的存放地址,在堆中存放数据。

对象使用的是引用赋值。当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在堆中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。

3、数组是引用类型

我们先来看一个例子:

var a = [1,2,3];

var b = a;

a = [4,5,6];

alert(b); //[1,2,3]

好像数组是基本类型一样。。,但是:

var a = [1,2,3];

var b = a;

apop();

alert(b); //[1,2]

这是怎么回事?因为:(知乎解释)

a = [4,5,6];//改变的是a引用本身,没有改变数组对象,a和b没有了关系。

apop();//改变的是数组对象,a引用没有改变。

b = a;//该 *** 作后,b直接指向数组对象,不是b指向a,a再指向数组。

//所以改变a引用并不会对b引用造成影响,改变数组对象可以。

这个问题就跟我之前在React todo-list 一篇中提到的问题一样:

var tasks=thisstatedata;

tasks=tasksfilter(function(i){

return iindex!=taskId;

});

由于filter函数是返回一个新的数组,虽然仍然用tasks去接收,但这时候tasks的指向已经是新数组啦,所以tasks和data已经不在有关系。(concat也是返回新数组)

而push和splice函数是在原数组上 *** 作,所谓在原数组 *** 作,指的是指向不变,所以tasks和data是相关联的。

4、参数传递

js的函数参数传递为值传递。

当传入的是 基本类型的参数时:就是复制了份内容给i而已,i与age之间没有关系。

function setAge(i)

{

alert(i);//24

i = 18;

alert(i);//18,i的改变不会影响外面的age

};

var age = 24;

setAge(age);

alert(age);//24

当传入的参数为引用类型时:

function setName(obj)

{

objname = 'haha';

};

var obj2 = new Object();

setName(obj2);

alert(obj2name);    //  haha

这看起来很像是传递的是引用,因为objname受到改变了,但其实不是,其实还是值,因为obj2本身的值就是新对象的地址,所以传进去的就是这个地址。

这是阿里2014年的笔试题:

var a = 1;

var obj = {

b: 2

};

var fn = function () {};

fnc = 3;

function test(x, y, z) {

x = 4;

yb = 5;

zc = 6;

return z;

}

test(a, obj, fn);

alert(a + objb + fnc);

答案:12

首先test传递进去的实参中,a是基本类型(,复制了一份值),obj是object(指向地址,你动我也动),fn也当然不是基本类型啦。在执行test的时候,x被赋值为4(跟a没关系,各玩各的,a仍然为1),y的b被赋值为5,那obj的b也变为5,z的c变为6,那fn的c当然也会是6 所以alert的结果应该是1+5+6 =12 (其实test不返回z也一样,z仍然改变的)。

<body>

<input type="text" name="name" />

<input type="text" name="age" />

<button type="button" onclick="getInput()">获取</button>

<script>

function getInput(){

var inputDOM = documentquerySelectorAll('input');

var json = Array();

for (var i = 0, len = inputDOMlength; i < len; i++){

jsonpush({"name": inputDOM[i]name, "value": inputDOM[i]value});

}

//json = encodeURI(json); //如果值中有&、等符号,要转为base64编码

consolelog(json);

}

</script>

</body>

<input id="A" onkeydown="setText(value)">

<input id="B">

// 同步监听A的输入 将A的value赋值给B

function setText(value){

var b = documentgetElementById("B");

bvalue = value;

}

意思你要通过字符串获得变量的实例,

浏览器环境下,通过var定义的变量,可以在window中找到,比如

var a = "hello world";

consolelog(windowa); //hello world

在node环境下可能是在global下也能找到,但是没试过,要是ES6的let定义的,我感觉是很难取到,因为可能存在编译器的栈里面

ASP是在服务器端执行的,JS是在浏览器端执行的,所以ASP想要取得JS中的值,一定要有“提交”的过程。通过ajax,jquery,表单,都可以提交。也可以用img或iframe等元素产生一个请求达到提交的目的。

例如:

<img src="" width=1 height=1 id="tu" />

<script>

documentgetElementById("tu")src="xxaspi=" + i ;

</script>

可以在xxasp里面用i=request("i") 取得i变量的值。

以上就是关于js赋值 怎么传值赋值全部的内容,包括:js赋值 怎么传值赋值、作业求帮忙、js怎么获得多个input值、并赋值给json对象、1直没想出来帮帮忙、HTML JS 取值和赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9649555.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存