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.‘===’比较规则:只要数据类型不同,就不相同
- number类型与string类型比较,string会转换为number类型 // 11
-
var s= '0' if(s == 0){ alert("11") }else { alert('00') }
- 布尔类型与其它任何类型进行比较,布尔类型将会转换为number类型 //11
-
var s= '0' if(s == false){ alert("11") }else { alert('00') }
number类型或string类型与object类型进行比较,number或者string类型都会转换为object类型
-
var a = 0, b = {}; a == b//false
本文章持续更新中......