JavaScript细节易错点整理

1.注意:不要直接判断两个浮点数是否相等

console.log(0.1 + 0.2);//0.30000000000000004
console.log(0.1 + 0.2 == 0.3);//false
console.log(parseInt(0.01) * 10 + parseInt(0.02 * 10) == parseInt(0.3));//true

2.isNaN("red");//false   任何不能被转换为数值的值都会返回true

3.字符串是不可变的,他在内存中都是另辟空间的。(内从中栈是用来存储基本类型的)

var str="old";str="new"; console.log(str);//new

栈中有两块空间分别存放"old","new",只不过"old"无法在访问,等待垃圾回收。

4.字符串拼接。

var a='100',b=100; var c=a+b,d=a-c; 
console.log(c);//100100 typeof(c)//string
console.log(d);//0 typeof(c)//number

5.Boolean(''),Boolean(0),Boolean(NaN),Boolean(null),Boolean(undefined)均返回false.

注意:  var s="0"; console.log(Boolean(s));//true

6.转换成字符串类型的三种方法  toSting(),  String(),  ""+str ,

几乎每一个值都有toString()方法,除了Null只有一个值null , Undefined只有一个值undefined

 console.log(typeof undefined);//undefined
 console.log(typeof null);//object

String()用于转换undefined和null

 console.log(toString(null) );//[object Undefined]
 console.log(String(null) );//null

7.转换成数值类型的三种方法 Number(),parseInt(),parseFloat()

var a="123",b="123a",c=11.1;
console.log(Number(b));//NaN    Number()如果要转换的字符串中有一个不是数值的字符,则返回NaN
console.log(Number(" "));//0
console.log(parseInt(b));//123
console.log(parseFloat(b));//123
console.log(parseInt(c));//11
console.log(parseFloat(c));//11.1

8.函数的返回值.若return ; 则返回undefined     若没有return  也返回undefined

function add() {
    var str=5;
}
console.log(add());//undefined

function add1() {
    var str=5;
    return ;
}
console.log(add1());//undefined

9.javaScript没有重载。

10.变量作用域问题。

f1();
console.log(c);//9
console.log(b);//9
console.log(a);//ReferenceError: a is not defined
function f1() {
    var a=b=c=9;
    console.log(a);//9
    console.log(b);//9
    console.log(c);//9
}

 11.1.函数是一种数据类型;2.函数可以作为另一个函数的参数

 12.浅拷贝:一种是把一个对象的地址给另一个对象,是他们的指向相同,两个对象用共同的属性和方法(堆中只有一块空间);另一种是把一个对象中的所有内容复制一份给另一个对象(堆中有两块空间)。

var o1={
    name:"lisi",
    age:20,
    sayHi:function () {
        console.log("hi");
    }
};
var o2=o1;//堆中只有一块空间
console.log(o2.name);//lisi
o2.sayHi();//hi

var o3={};//堆中有两块空间
function extend(a,b){
    for(var key in a){
    b[key]=a[key];
    }
}
extend(o1,o3);
console.log(o3.name);//lisi
o3.sayHi();//hi

深拷贝:把一个对象中的属性或者方法,一个一个的找到,并且在另一个对象中开辟相应的空间,一个一个的存储到另一个对象中

var obj1={
    name:"lisi",
    age:20,
    car:["宝马","奥拓"],
    dog:{
        name:"大黄",
        age:5
    }
};
var obj2={};
function extend(o1,o2){
    for(var key in o1){
        var item=o1[key];
        if(item instanceof Array){
            o2[key]=[];
            extend(item,o2[key]);
        }else if(item instanceof  Object){
            o2[key]={};
            extend(item,o2[key]);
        }else{
            o2[key]=item;
        }
    }
}
extend(obj1,obj2);

13.this的指向:

1.普通函数中的this是谁?---window

2.对象.方法中的this是谁?--实例对象

3.定时器中的this是谁?--window

4.构造函数的this是谁?--实例对象

5.原型对象中的this是谁?--实例对象

14.  ‘==’的转换规则

15.‘===’比较规则:只要数据类型不同,就不相同

 

本文章持续更新中......

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值