欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题

程序员文章站 2022-07-02 08:53:55
题目一: var a={n:1} var b=a; a.x=a={n:2}var a={n:1}var b=a;a.x=a={n:2}问:console.log(a)console.log(a.x)console.log(b.x)console.log(b)在看了解析文章并消化之后作为学习笔记记录。首先:b=a是浅拷贝,堆栈中引用的是同一个对象地址。赋值运算符:从右至左执行var a= 1 ,b=2, c=3;a=b=c;输出三个变量结果都是3。原因就是赋...

题目一: var a={n:1} var b=a; a.x=a={n:2}

			var a={n:1}
			var b=a;
			a.x=a={n:2}

问:
console.log(a)
console.log(a.x)
console.log(b.x)
console.log(b)
在看了解析文章并消化之后作为学习笔记记录。
首先:
b=a是浅拷贝,堆栈中引用的是同一个对象地址。
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
赋值运算符:从右至左执行
var a= 1 ,b=2, c=3;
a=b=c;
输出三个变量结果都是3。原因就是赋值运算符是从左到右执行。
本题中a.x=a={n:2}
但是本题中值得注意的是出现了点运算
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
他的优先级显然比=高,所以先执行他,所以可以理解为a.x指向后面的一大坨用图来表示会直观一些:
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题

两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
接着计算两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
此时要让a={n:2}就要开辟新的变量,引用新的地址因为他不是a.x也不是a.y,而是整个变量要变,所以改变了引用地址,也用图来表示

两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
到这里
a的输出值:{n:2}
b的输出值:{n:1,x={n:2}}
所以打印他们值:
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
值得注意的是{x={a={n:2}}}的运算结果是x={n:2}因为a={n:2}的运算结果是{n:2}
理解之后看一看附加的题:

			var c={q:1}
			var d=c //此时他们指向同一地址空间
			d.q=c.f={q:2}

分析:走到第二步的时候他们指向同一个地址空间 堆栈中:{q:1},接着c.f={q:2}此时堆栈中多一个f={n:2},在计算d.q=c.f,也就是在堆栈中更改q属性q={c.f={q:2}}运算结果q={q:2}此时没有新开辟的变量,远程地址,所以他们指向的都是同一个堆栈。
打印出c和d这两个变量,因为最开始的时候堆栈中有一个q属性了,后面d.q的时候就不是在堆栈中新增q属性,而是进行了更改
先看结果:两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
指向同一个堆栈,里面的东西也一样。
**注意:**如果把最开始的var c={q:1},也就是初始化时不是使用q:1那么在第二步运算的时候,就是往堆栈中新增q属性。

			var c={hhhhh:1}
			var d=c //此时他们指向同一地址空间
			d.q=c.f={q:2}

此时打印c和d,堆栈中就有三个属性hhhhh,q,f。
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题

题目二:请实现javascript中的indexOf功能,判断一个字符串a中是否包含另一个字符串b。

a)如果包含,需要返回匹配字符串b的位置。
b)如果不包含,需要返回-1。.
如: indexOf(“hello”,“el”) return 1。

这个题目我一开始想到了比较复杂的做法,遍历再match。然后仔细查看了match函数才发现,原来这么简单。
先放代码:

function indexOf(str,subStr){
			var ret=str.match(subStr)
			return ret?ret.index:-1
		}
		var a="hello world"
		var b="world"

让我们看看W3C对于match的介绍
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
检索指定的值,返回指定的值,而不是字符串位置。所以我们只要用一个变量存住返回给我们的字符串。如例 用ret进行保存,然后判断ret是否为空。用三元表达式,不为空说明检索到了,为空则返回-1;
console.log(a.match(b))打印出来看到,他给我们返回的是一个数组。里面有返回的检索到的值“world”,有index下标值,有被匹配的input属性里面的值:“hello world”。
所以ret.index为6,也就是题目要求的返回位置。
如果没有匹配的值,会返回null。

两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
match还能和正则表达式联动==

		var str="1 plus 2 equal 3"
		console.log(str.match(/\d+/g))

flag为g。全局检索数字。
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
方法二:
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
用search方法
两道JS练习题笔记,JS的赋值问题以及常用字符串函数问题
我去!这不是和indeof一样吗。所以要完成题目的要求更为简单返回a.search(b)就完成了!

本文地址:https://blog.csdn.net/qq_42285889/article/details/107567388

相关标签: JS学习 js