js数据相关简单的问题与理解

2019-10-31  本文已影响0人  ClayChan

Q:
js数据类型?
A:
原始类型:number、string、boolean、特殊类型(null&undefined)

// 不区分整型和浮点数值
var a = 1;    // number类型
var b = 1.1;    // number类型

// ""和''均可构成字符串
var c = "hello";    // 双引号内文本构成字符串
var d = 'world';    // 单引号内文本构成字符串

// true和false为布尔值
var e = true;
var f = false;

//  null和undefined均为特殊类型
var g = null;
var h = undefined;

对象类型:array、function&object

Q:
==和===的区别?
A:
原始类型值的比较是值的比较:
它们的值相等时它们就相等(==);
它们的值和类型都相等时它们就恒等(===)。

console.log( false == 0 )    //true
console.log( false === 0 )    //false

部分值会在布尔值转换的时候被转换为false,但是并不意味着它们和false相等

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

console.log( undefined == true )    //false
console.log( undefined == false )    //false

console.log( undefined == null )    //true
console.log( undefined === null )    //false

console.log( null ==  false )    //false
console.log( null == true )    //false

console.log( "" == false )    //true
console.log( "" == true )    //false

console.log( 0 == false )    //true
console.log( 0 == true )    //false

console.log( -0 == false )    //true
console.log( -0 == true )    //false

Q:
null和undefined的区别?
A:
null:正常的或在意料之中的值的空缺
undefined:出乎意料的或类似错误的值的空缺

Q:
Infinity和NaN
A:
Infinity:表示无限大,超过JS的number所能够表示的最大值。
NaN:表示not a number,无法计算的结果。

//    NaN与任何值都不相等,包括它自身
console.log( NaN == NaN )    //false

//    识别NaN的方法
console.log( isNaN(NaN) )    //true

Q:
为什么两个空数组不相等?

var a = [], b = [];
console.log( a == b );    //false

A:
对象类型的比较和原始类型不同(原始类型见上Q),对象的比较并非值的比较,而是引用的比较:
对象:包含同样的属性及相同的值的两个对象,它们也是不相等的
数组:各个索引元素完全相等的两个数组,它们也是不相等的

var a = { n : 1 }, b = { n : 1 };    //同样属性&相同的值
console.log(a == b);    //false

var c = [], d = [];    //单独的空数组
console.log( c == d );    //false

对象类型一般我们称为引用类型,区别于基本类型,对于对象值的使用我们都是采用了引用的方式--reference,所以只有在引用对象为同一对象时,它们的值才会相等

var a = [];    //定义a来引用一个空的数组
var b = a;    //定义b来引用同一个数组
console.log(a == b);    //true
b[0] = 1;    //调用变量b来修改数组
console.log(a[0]);    //1,因为引用的是同一个数组,所以a也会改变
上一篇 下一篇

猜你喜欢

热点阅读