JavaScript权威指南(第六版) 读书杂记一

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   注意:数组长度并没有改变,只是留下了一个 “洞” 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值