数据类型:原始类型( number,string,boolean,null,undefined ),
对象类型,(函数(function)和数组(array) 和时间(date)等都属于对象类型
隐式转换:37"-7结果为30,减号理解为减法运算
“37”+7结果为“377”,加号理解为字符串拼接
巧用 +/- 规则转换类型:
1. num - 0 -> 数字;
2. num + '' -> 字符串;
= 表示赋值;
== 表示比较,但是会做隐式类型转换。比如, "1 == true", 此时,1会从一个Number数 据类型转换到Boolean数据类型,进而再做比较;
=== 表示比较,不会去做数据类型的转换,因而相对于“==”也更严格一些。
包装对象:
var a='string';
alert(a.length)// 结果是6;
a.t=5;
alert(a.t)//结果为undefined
当基本数据类型执行对象类型才有的属性和方法时,js会临时创建一个对象,内容和基本类型一样,执行完毕后就会销毁点这个对象。
JavaScript类型检测:
typeof, instanceof, object.prototype.toString ,constructor, duck type
用处:
-
保证代码的健壮性,js是弱类型语言,类型检测可以避免出现不必要的类型转换问题。
-
有助于更高质量的完成代码书写。
-
有助于功能逻辑的把控。
类型检测小结
1.typeof适合基本类型及function检测,遇到null会失效 2.[[Class]]是通过{}.toString拿到,适合内置对象和基本类型,遇到null和undefined会失效 ie 6 7 8 会返回[object object] 3.instanceof 适合自定义对象,也可以用来检测原生对象,在不同iframe和window间检测时失效
JavaScript表达式
1. 原始表达式 //常量、直接量、关键字、变量 3.14、"test"、null、i、k、j 2. 初始化表达式 //[1,2]、{x:1, y:2} 3. 函数表达式 //var fe = function(){}、(function(){})() 4. 属性访问表达式 //var o = {x:1}、o.x、o['x'] 5. 调用表达式 //func() 6. 对象创建表达式 //new Func(1,2)、new Object
运算符:
1. var val = (1, 2, 3); // val =3; "," 运算符,值为最右边的 var obj = { x:1 }; obj.x; // 1 delete obj.x; // 删除 obj 的 x 属性 obj.x; // undefined 2. var obj = {}; Ojbect.definProperty(obj,'x',{ configurable: false, // 要为 true 才可以 delete value: 1 }); delete obj.x; // false obj.x; // 1 3. window.x = 1; 'x' in window; // true 4. {} instanceof Object // true typeof 100 === 'number' // true 5. function Foo(){} Foo.prototype.x = 1; var obj = new Foo(); obj.x; // 1 obj.hasOwnProperty('x'); // false obj._proto_.hasOwnProperty('x'); // true 6. this; // 若是全局变量 --> window (浏览器) var obj = { func: function(){return this;} // this --> 当前对象 }; obj.func(); // obj 7. void 0 // undefined void(0) // undefined