JavaScript圣经中哪些奇怪的问题(1)

1.概述

这些问题都是我在看JavaScript权威指南6的时候看到的,之前不是特别熟悉JavaScript,后来才发现原来JavaScript也是一门也有意思的语言。语言没有好坏,强弱之分,只能说使用的场景各不相同,这也要看你掌握的程度。
以下我在看书的时候,总结了一些问题,你看看你能对多少?就知道你对JavaScript的理解程度了。这些问题估计开发中不经常遇到,但是能让你明白JavaScript这门语言的一些特性,以及一些易错点,我们不光要会掉api,还有学会灵活使用,只有真正的理解了,才可以运用自如,得心应手。

2.看代码片段,写出答案:

1.看如下代码,写出输出结果:

		 function test(){
    
    
			  return 
             "hello";
		 }
		 
		 console.log(test()) // 输出 undefined

答案:undefined

解释:因为JavaScript代码会解析为: return; “hello”;也就是说在break,continue,return之间随后的表达式不能进行换行,否则浏览器解析会把原本代码的意思解析为另外一个意思。

2.观察以下代码,写出输出结果::

		 var x=5; var y=2;
		 x
		 ++
		 y
		 console.log(x,y) 

答案:5,3,因为代码会被解析为:x; ++y; --和++运算符如果不写在同一行,++和–运算符将会作为下一行代码的前缀操作符与之一起解析。

3.观察一下代码,写出输出结果:

         var str="hello";
		 str.len=4;
		 console.log(str.len) //输出 undefined

		 var str=new String("hello");
		 str.len="world";
		 console.log(str.len) 
		 

答案:第一个输出:undefined第二个输出:world

解释:当运行这段代码时, str.len的值是undefined。第二行代码创建一个临时字符串对象,并给其len属性赋值为4,随即销毁这个对象。第三行通过原始的(没有被修改过)字符串值创建一个新字符串对象,尝试读取其1en属性,这个属性自然不存在,表达式求值结果为undefined。这段代码说明了在读取字符串、数字和布尔值的属性值(或方法)的时候,表现的像对象一样。但如果你试图给其属性赋值,则会忽略这个操作:修改只是发生在临时对象身上,而这个临时对象并未继续保留下来。

原始类型的属性值是不能进行修改的,只有对象类型的属性才可以进行新增和修改。
当然我们也可以将原始类型的变量包装为对象类型的。

4.观察以下代码,写出输出结果:

		 var arr1=[1,2];
		 var arr2=[1,2];
		 console.log(arr1==arr2) 
		 
		 var a=[]
		 var b=a;
		 a[0]=2;
		 a[1]=3;
		 console.log(a===b,a,b)

答案:第一个输出:false,第二个输出:输出 true 并且 a和b的值都为 2,3

对象类型的变量,如果以对象之间进行赋值的形式来克隆某个对象的话,是达不到对象克隆的形式,当你去修改另外的一个对象的时候,另外一个对象也会随之改不变,因为这两个变量存放的都是同一个对象的引用,指向的是同一个对象,两个单独不同的对象或者是数组,即使值一样,但是他们比较的时永不相等。

就像你刚看到的如上代码,将对象(或数组)赋值给一个变量,仅仅是赋值的引用值:对象本身并没有复制一次。如果你想得到一个对象或数组的副本,则必须显式复制对象的每个属性或数组的每个元素。下面这个例子则是通过循环来完成数组复制

var a = ['a' , 'b' ,'c'];
// 待复制的数组
var b =[];
// 复制到的目标空数组
for(var i = 0; i < a.length; i++) {
    
    
// 遍历a[]中的每个元素
b[i] = a[i];
// 将元素值复制到b中
}


5.观察以下代码,写出输出结果:

		// 20 两个字符串均转为数字 
		 console.log("5"*"4"); 
		 
		 // NAN  字符串无法转换为数字
		 console.log(1-'x'); 
		 
		 // NANhello NAN转换为字符串 “NAN”
		 console.log(1-'x'+"hello") 
		 
		  // 字符串"2"被转换为 数字2 输出true  也允许字符串前后出现空格
		 console.log("2"==2) 
		 
		// 隐式转换 将false转为0
		 console.log(false==0) 

好了,今天就到这儿吧,有空在和大家进行分享。码字不易,如果此文对您有所帮助的话,请点个赞再走,谢谢。

Guess you like

Origin blog.csdn.net/m0_46188681/article/details/118117675