javascript易错题
来源:互联网 发布:淘宝旺铺智能版好用吗 编辑:程序博客网 时间:2024/06/16 04:36
判断语句变量的自动转化
var x=new Boolean(false);if(x){ //x此时为对象,Boolean(对象)==true alert("hi");}var y=Boolean(0); //数值0,Boolean(0)==false;if(y){ alert("hello");}
知识点:
if(flag){}//会先将flag执行转换操作,即if(Boolean(flag))
转换规则:
- flag为true,非空字符串,任何非零数字值,任何对象。Boolean(flag)结果是true;
- flag为false,空字符串(“”),0/NaN,null,undefined。Boolean(flag)的结果均为false。
2
var f=function g(){ return 23;}typeof g() //出错,此时g不存在。
类型判断
var str = new String("a");var str1 = "a";typeof str; //'objecct'str instanceof String; //truetypdof null ;//"object"null instanceof Object ;//false//typeof 返回的数据类型有object number function undefined string boolean
(除了new Funciotn)凡是通过new 出来的对象,typeof运算都是object,最好的判断类型的方法为如下。
var str = new String("a");Object.prototype.toString.call(str);// "[object String]",不管是否是通过new出来的都一样,只要是字符串形式。/**其他类似*数字:"object Number]"*数组:"[object Array]"*布尔:"[object Boolean]"*/var f = new Fucntion();typeof f //"function"//但function f1(){};typeof new f1(); //"object"
console.log(1+ +"2"+"2"); //+"2"把字符串2转化成了数字2,故结果32
优先级问题
if(! a in window){ //这里可以访问到a,因为a的变量声明被提升 var a = 1;}console.log(a); //但是由于 !的优先级高于in,故上述可变成if((!a) in window){ //这里可以访问到a,因为a的变量声明被提升 var a = 1;}console.log(a); //故不会执行var a=1,故输出undefined
replace 函数第二个参数是函数的问题
如下题
"2 3 4".replace(/\d+/g,parseInt);//replace函数说明如下
首先看说明
replace() 方法的参数 replacement 可以是函数而不是字符串。在这 种情况下,每个 匹配 都调用该函数(感觉这里不严谨,不应该是匹配项调用该函数,而是调用该函数,并且传入匹配项作为参数) ,它返回的字符串将作为替换文本使用。
那么这些 匹配是啥呢?换句话说传递给函数(replace第二个参数)是什么? 有文档可知
其参数有
也就是说,上面的代码相当于
"2 3 4".replace(/\d+/g,function(result,offset,sourse){ return parseInt(result,offset,sourse); }); //即此时,分别用parseInt(2,0,"2 3 4")//2 替换2//第三个参数将被忽略,0表示转换2前是十进制,parseInt(3,2,"2 3 4") //NaN 替换3//3转换前是2进制,不存在的,所以为NaNparseInt(4,2,"2 3 4") //NaN 替换4//故结果为"2 NaN NaN"
正则表达式
/^[a-z]/.test(null); //ture /^[a-z]/.test(); //true
对象全等
var a={"fo":"bar"}; var b={"fo":"bar"}; console.log(a === b) //false,对象比较的应该是是否是指向同一块内存地址,是的话就全等,否则不全等。
浮点数相加精度问题
console.log((0.1+0.2)===0.3)//false //原因 0.1+0.2会产生精度的问题,其他的浮点数相加貌似不会产生精度问题 console.log(0.1+0.2) //0.30000000000000004 自然就不相等了
阅读全文
0 0
- javascript易错题
- Javascript
- JavaScript
- javascript
- javascript
- javascript
- javascript
- javascript
- JavaScript
- javascript
- JavaScript
- Javascript
- javascript
- javascript
- JavaScript
- javascript
- javascript
- JavaScript
- 利用PANDAS按日期做分组运算
- 端口大全总结
- 7. 在jsp页面中编写java遇到的问题
- Dead Job Still In DBA_SCHEDULER_RUNNING_JOBS (文档 ID 2019899.1)
- Android Studio里面的Build.gradle的详细配置说明
- javascript易错题
- ros使用usb硬件,调用固定设备名修改设备权限的设置方法
- Farmer John的故事
- Java连接数据库
- dell 成就 5470安装win10 ubuntu双系统方法
- python(三)
- 循环计算文本框值之间的差值
- Opencv-python接口:轮廓检测
- 记一次SQL查询