0 与 '0' 的是与非
0 是 Number 而 ‘0’ 是 String 。
尝试全局通过
!0来判断不大可靠的一个判断,0 与 ‘0’ 是一个不同的概念。
!0为 true 而
!'0'为 false。
0 == '0' 而 0 !== '0' 等于和全等有着一定的差异。
那么,如果 !0 是 true ,会等于 true 或者全等于 true ? 对的,都是对等的,在 !0 之后的值都变为了布尔值。
但是 !0 为 true ,0 就等于 false 了,这是对的想法,但是否全等于? 很不幸 0 !== false 。
可以知道,0 为假,那么 1 为真,而任何 !'str' 都是为假。
假如这个字符串为空呢?为什么非空为真?
例子:
- typeof 0;
- typeof '0';
- typeof 1;
- !0;
- !1;
- !0;
- 0 == false;
- 0 === false;
- 1 == true;
- 1 === true;
- 0 == '0';
- 0 === '0';
- !'' == true;
null 与 instanceof 的是与非
值得注意的是 typeof null 为 object ,但 null instanceof Object 却是 false 。 因为虽然 null 的类型是 object ,但是 null 不具有任何对象的特性。
尝试 typeof 'str' 的结果为 string ,却是误以为 'str' instanceof String 为 true ,却是不能所愿,在 msdn 上面有说明: instanceof 方法要求开发者明确地确认对象为某特定类型。
很明显,'str' 是一个没有指明对象的类型,如果想要为 true 。需要对 str 进行 new String() 处理。
但是会惊讶的发现进行 new String() 处理后,instanceof String 为真,返回来通过 typeof 该 'str' 却变成了 object 类型了。
对于真假,!null 时为 true。但 null 却是不为 false 。
- typeof null;
- null instanceof Object;
- typeof 'str';
- 'str' instanceof String;
- new String('str') instanceof String;
- typeof new String('str');
- !null === true;
- null == false;
undefined 与 空 的差异
undefined 是一个类型,但是空呢?空有几种,'' 是空,只定义不赋值是空, {} 是空,[] 是空。
- typeof a;
- typeof '';
- typeof undefined;
- typeof {};
- typeof [];
在进行非处理的时候,值得注意注意的是,!{} 和 ![] 是为 false 的;
那么在处理 true、false 的时候怎么处理?
定义未赋值、''、undefined这几种情况直接用非处理。
而空对象的处理,较好的处理方式的直接格式化为字符串。
对于空数组直接用长度处理,需要注意的是,用 ![] 处理是错误的,返回的是 false ;
- !a;
- !'';
- !undefined;
- [].length === 0;
- JSON.parse({}) === '{}';
评论 (0)