《高级程序设计》整理
在喜马拉雅上听了沙翼的《高级程序设计》的音频课程,记录了一些题目当做整理复习用
q1
js区分大小写,html和css不区分大小写。那么请问,js在html中是否区分?
a:
q2
汉字是否可以作为变量名 可以,但不推荐
q3
分号是否为必写的?
不是。js在执行时若没有分号,会给两行合并执行,可能会有错误难定位,所以不推荐使用。例如第二行如果是小括号会认为是执行函数。
这也是为啥有些代码里会在开头加分号。
当涉及到return break continue不会和下一行合并,所以return后面有内容的时候不要换行。
q4
var a=‘asd’;a.length=4; 输出a.length为undefined,为什么?
基本类型没有属性,当给赋值时会自动生成一个对象,之后就会销毁掉。
a.toUpperCase() a不变同理;
q4
0.1+0.2 不等于 0.3 为啥?
因为你用的十进制,而计算机是二进制,计算机只能将最接近的数返回给你。
可以 (0.1*1000 + 0.2*1000)/1000
Math.abs(0.1+0.2-0.3) < =Number.EPSILON
q5
对象属性的查询可以用.和[],具体是怎么实现的?
1.js遇到.或者[]会先判断变量是否为null或者undefined,是的话直接报错。
2.变量是不是对象,不是的话转成对象。
3. .后面的会直接转成字符串,而[]会先进行计算,而后转为字符串,这也就是为什么a[‘1’] a[1]效果相同
4. 属性本身不存在,返回undefined。
q6
一元加减是如何实现的?
会把表达式转成数字,如果是减加负号。
q7
a=1; b=a+++a; a b 各多少?
1.优先级 属性访问的优先级最高,第二是一元运算符;
例如a=3;++a==3;
false 因为先一元运算后==
2.结合性
js中所有的一元运算,三元,赋值都是从右向左;其他都是从左向右;
a=b= c=d 先d赋值c,c赋值给b,b给a,因为赋值是从右向左。
q8
a&&b||c 和 a?b:c
以上两个是一样的,通常ifelse会用第一种,赋值用第二种
q9
7>6>5 false 从左向右计算