JavaScript区分大小写,HTML不区分大小写
数据类型:
- 原始类型<数字、字符串、布尔值>
- 对象类型<属性的集合:名值对>;
- null:typeof返回为 object,所以可认为是一个特殊的对象值;但其可表示数字、字符串、对象的“无值”状态
- undefined:没有初始化
JavaScript不区分整数值和浮点数值,所有数值军用浮点数表示,64位浮点格式
JavaScript中的算数运算的溢出、下溢或被0整除时不会报错 ;
- 溢出:Infinity / -Infinity
- 下溢:0 / 负零,两值基本和正常的0完全一样
- 被零整除:一般返回 Infinity、-Infinity;除了 0除 0 时无意义,返回 NaN
日期和时间:Date()
var then = new Date(2011,0,1);
var later = new Date(2011,0,1,17,10,30);
var now = new Date(); //当前的日期和时间
var elapsed = now - then; //日期减法,计算时间间隔的毫秒数
later.getFullYear(); // 2011
later.getMonth(); // 0:从0开始计算月份
later.getDate(); // 1:从1开始计算天数
later.getDay(); // 5:返回星期几;0:周日;5:周一
later.getHours(); // 当时的时间 17:10pm
later.getUTCHours(); // 使用UTC表示小时的时间,根据时区
“ == ”,以下结果均为true
null == undefined // 这两值被认为相等
"0" == 0 // 在比较之前,字符串转换成数字
0 == false // 在比较之前,布尔值转换成数字
"0" == false // 在比较之前,字符串和布尔值都转换成数字
显示类型转换
Number("3") // 3
String(false) // "false" ==> 也可通过 false.toString() 转
Boolean([]) // true
Object(3) // new Number(3)
- 除了null 或undefined外任何值都有toString()
- 不要把 null 或 undefined 转换为对象,会报 TypeError 类型错误
- null 、undefined 转Object,不会报错,返回一个新建的空对象
声明全局变量的时候可以不写 var ,但声明局部变量的时候必须使用var语句;如果在函数中声明了一个不带 var 的变量,那这个变量就是全局变量
var scope = "global";
function f(){
console.log(scope); // 输出 undefined,而不是 global
var scope = "local"; // 变量这边开始赋初始值,但其实在方法最开始,该变量已经被声明了
console.log(scope); // 输出 local
}
按照安卓的思路,会认为第一句输出是 global,因为方法内部的同名局部变量的声明赋值还没有被运行到,但其实不是。因为函数作用域的特性,函数内变量的声明会提前到函数体顶部,但变量的初始化会保留在原来的位置按序被执行
当使用var声明一个变量时,创建的这个属性是不可配置的,即这个变量无法通过delete运算符删除
var truevar = 1; // 声明一个不可删除的全局变量
fakevar = 2; // 创建全局对象的一个可删除的属性
this.fakevar2 = 3; // 同上
delete truevar // => false:变量并没有被删除
delete fakevar // => true:变量被删除
delete this.fakevar2 // => true:变量被删除
属性的访问
var o = {x:1,y:{z:3}};
var a = [o,4,[5,6]];
o.x // => 1
o.y.z // => 3
o["x"] // => 1
a[1] // => 4
a[2]["1"] // => 6
a[0].x // => 1
"3" * "5" // => 15 是合法的表达式;JavaScript会将操作数转换为数字
“3” + “5” // => "35"
"1" + 2 // => "12"
true + true // => 2 布尔转数字后做加法
2 + null //=> 2 null转为0后做加法
2 + undefined // => NaN undefined转为NaN后做加法
1 + 2 + “ blind mice”; // => "3 blind mice"
1 + (2 + " blind mice"); // => "12 blind mice"
1 + {} // => "1[object object]" 对象转为字符串后进行字符串连接
true + true // => 2
“ / ”:在Android中整数除以整数结果亦为整数,但在js中,所有数字都是浮点型,所以除法运算的结果也是浮点型;例:5/2 = 2.5。除数为0结果为正无穷或负无穷;除数被除数都为0结果为 NaN,所以任何情况下都不会报错
"++":从不进行字符串连接操作,总是会将操作数转换为数字并增1;例:x = "1" ; ++x => 2; x + 1 => "11"
0x1234 & 0x00FF // => 0x0034 每位转化成二进制再按位比较后得出结果
0x1234 | 0x00FF // => 0x12FF
0xFF00 ^ 0x00FF // => 0x0FF0 异或
~0x0F // => 0xFFFFFFF0 或 -16
"===":严格相等运算符
- 类型不同,不相等
- 都为 null 或 都为 undefined,不相等
- 都为 true 或 都为 false,相等
- 单个或都为 NaN,不相等。NaN和任何值都不相等,包括本身。x!==x:只有当X 为 NaN时,才为 true
- 两值同为数字且数值相等,则相等。如果一个为0,一个为-0,同样相等
- 若两值为字符串,所含对应位上的16位数完全相等,则相等
- 如果两个引用值指向同一个对象、数组、函数,则相等;若指向不同对象,即使两对象完全一样也不等
"==":相等运算符,允许进行类型转换
- 严格相等就相等
- 如果一个 null,一个 undefined,相等
- 一个数字,一个字符串,先将字符串转数字,再进行比较
- 值为true,转为1 后比较;false,转为0后比较
- 一个值为对象,拎一个值为数字或字符串,对象转化为原始值后比较;通过 toString() 或 valueOf() 转换为原始值
in 运算符:左操作数为一个字符串,或转化为字符串,右操作数为一个对象,右侧对象拥有左侧的属性名,则为 true
var point = {x:1,y:1};
"x" in point // => true
"z" in point // => false
"toString" in point // => true 对象继承了 toString 方法
var data = [7,8,9];
"0" in data // => true
1 in data // => true 数字转为字符串
3 in data // => false 没有索引为3 的元素
delete运算符:删除对象属性或数组元素
var o = {x:1,y:2};
delete o.x;
"x" in o // => false
var a = [1,2,3];
delete a[2];
2 in a; // => false in 左边的字符串指的是数组下标
a.length // => 3 注意:数组长度并没有改变,只是留下了一个 “洞”