JavaScript权威指南笔记

字符长度 P39

var p = 'π';
var e = 'e';
var ch = '中';
p.length
e.length
ch.length

在文件不同编码下,字符长度不同…
GBK下答案为2/1/2; utf8下为1/1/1

书中P39中的 例子怎么实现呢(p.length =>1 e.length => 2)??求告知

布尔值P43

下面的值会转换成 false

undefined
null
0
-0
NaN
"" //空字符串

对象(包括数组)或转换成 true

var arr = [];

if (arr) {
    console.log('true');  //输出true
}
else {
    console.log('false');
}

但是这里又不对了:

if (arr == false) {
    console.log('arr == false') //输出了false
}
else {
    console.log('arr != false');
}

原因:

类型转换

ValueStringNumberBooleanObject
undefined‘undefined’NaNfalsethrows TypeError
null‘null’0falsethrows TypeError
true‘true’1new Boolean(true)
false‘false’0new Boolean(false)
“” (empty string)0falsenew String(“”)
“1.2” (nonempty, numeric)1.2truenew String(“1.2”)
“one” (nonempty, non-numeric)NaNtruenew String(“one”)
0‘0’falsenew Number(0)
-0‘0’falsenew Number(-0)
NaN‘undefined’falsenew Number(NaN)
Infinity‘Infinity’truenew Number(Infinity)
-Infinity‘-Infinity’truenew Number(-Infinity)
1 (finite, non-zero)‘1’truenew Number(1)
{} (any object)NaNtrue
[] (empty array)0true
[9] (1 numeric elt)‘9’9true
[‘a’] (any other array)use join() methodNaNtrue
function(){} (any function)‘undefined’NaNtrue
false => 0
[] => 0    [0] => 0

隐性类型转换步骤


  1. 首先看双等号前后有没有NaN,如果存在NaN,一律返回false。
  2. 再看双等号前后有没有布尔,有布尔就将布尔转换为数字。(false是0,true是1)
  3. 接着看双等号前后有没有字符串, 如果是字符串:

  • 对方是对象,对象转字符串(方法见下面);
  • 对方是数字,字符串转数字
  • 对方是字符串,直接比较
  • 其他返回false
  • 如果是数字,对方是对象,对象转数字(方法见下面), 其他一律返回false
  • null, undefined不会进行类型转换, 但它们俩相等

对象转字符串

对象转数字

上图pdf下载

栗子:

var a;
console.dir(0 == false);//true
console.dir(1 == true);//true
console.dir(2 == {valueOf: function(){return 2}});//true
console.dir(a == NaN);//false
console.dir(NaN == NaN);//false
console.dir(8 == undefined);//false
console.dir(1 == undefined);//false
console.dir(2 == {toString: function(){return 2}});//true
console.dir(undefined == null);//true
console.dir(null == 1);//false
console.dir({ toString:function(){ return 1 } , valueOf:function(){ return [] }} == 1);//true
console.dir(1=="1");//true
console.dir(1==="1");//false

包装对象 P46

如果引用字符串的属性,就会将字符串通过new String()转换成对象,这个对象处理属性的引用;一旦引用结束,这个新创建的对象就会被销毁

var s = 'test';
s.len = 4;          // 引用结束立即销毁
console.log(s.len); // undefined

nullundefined 没有包装对象

参考资料:

http://www.haorooms.com/post/js_yinxingleixing
http://www.lookcss.com/js-type/


文章若有纰漏请大家补充指正,谢谢~~

http://blog.xinshangshangxin.com SHANG殇

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值