今天看书学习了一下, 现在根据书(红宝书)上的内容总结一下;
JavaScript 中有5 中简单的数据类型, 分别是 Undefined, Null, Boolean, Number, String.
var message = "some string";
console.log(typeof message);
console.log(typeof 89);
Undefined类型只有一个值, 就是undefined, 当使用var声明变量但未对其加以初始化时, 这个变量的值就是undefined,
var messages;
console.log(typeof messages); // undefined
但是包含Undefined的值和未定义的变量显然是不一样的,
var messages;
console.log(messages);
// console.log(age);
Null 类型是第二个只有一个值的数据类型 , 这个特殊的值是null,从逻辑角度来看, null表示一个空对象指针, 而这也是使用typeof操作符检查null值时会返“object”类型原因。
var car = null;
console.log(typeof car);// object
实际上, undefined 是派生自null的, 所以如果使用 == 操作符, 会返回true。
console.log(null==undefined);// true;
Boolean 该类型只有两个字面值, true, false, 注意区分大小写,
虽然Boolean类型的字面值只有两个 ,但是ECMAScript中所有类型的值都有与这两个Boolean等价的值, 要将一个值转换为其对应的Boolean可以调用转型函数 Boolean(),
var messageAsBoolean = Boolean(message);
console.log(messageAsBoolean); // true
其实很简单, 无论对那个什么值调用Boolean方法, 都只会返回true, false,两个布尔值, 而判定标准取决于要转换的数据类型及其实际值, 如果实际值不为空, 那么就是true, 否则是false, 对于数字类型, NaN类型 与 0 返回的是false, 对于对象, null返回的是false, 当然还有undefined。
这一点对于if语句非常重要 , 其就依靠这来判断接下来的行动是否进行。
if (message) {
console.log("Value is True")
}
也就是有message的值, 才有后面的数据。
Number类型
最基本的字面量是十进制, 可以直接赋值来表示, 整数也可以通过八进制, 或十六进制的字面值来表示, 其中, 八进制的第一位必须为0, 然后是八进制的0-7, 如果字面值中的数值超出了范围, 那么前导零将被忽略, 后面的数值被当作十进制数值解析
var octalNum1 = 070;
var octalNum2 = 079; // 数值范围不再是八进制, 将忽略前导零
var octalNum3 = 08;
console.log(octalNum1, octalNum2, octalNum3); // 56, 79, 8
注意, 八进制在严格模式下是无效的, 会抛出错误。
十六进制的前两位必须是 0x, 后面跟十六进制数字, (0-9及A-F), 其中, A-F可以小写,
var hexNum1 = 0xA;
var hexNum2 = 0x1f;
console.log(hexNum1, hexNum2); // 10, 31
在最终的计算中, 所有以八进制和十六进制的数值最终都将被转换成 十进制数值。
极大 极小 值的表示;
var floatNum1 = 3.124e9;
console.log(floatNum1);//3124000000
var floatNum2 = 3.342e-4;
console.log(floatNum2);// 0.0003342
数值范围
由于内存的限制, ECMAScript并不能保存世间上所有的值, 最小数值保存子啊 Number.MIN_VALUE, 最大值保存在Number.MAX_VALUE,中, 可以通过isFinite()函数来判断值是否是有穷的,
var result =Number.MAX_VALUE + Number.MAX_VALUE;
console.log(isFinite(result)); // false
NaN
即非数值, Not a Number ,是一个特殊的数值,这个数值用来表示一个本来要返回数值的操作数未返回数值的情况, 就是本来是有数值的 ,但是不知道出于什么原因, 并没有返回任何数值, 就会使用NaN来表示,
特点:
console.log(NaN/10); // NaN
. console.log(NaN == NaN);
针对这两点定义, ECMAScript定义 了isNAN()函数, 这个函数接受一个参数, 该参数可以是任何类型, 而函数会帮助我们确定这个参数是否“不是数值”。 isNAN() 在接受一个值后, 会尝试将这个值转换为数值, 某些不是数值的值会直接转换为数值, 例如字符串“10” , 以及 Boolean值, 而任何不能转换为数值的值都将返回true,
console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false
console.log(isNaN('10')); // false
console.log(isNaN("fsdf")); // true
console.log(isNaN(true)); // false
这个要反着记忆。
数值的转换。
有三个函数可以将非数值转换为数值, Number(), parseInt(), parseFloat()
第一个函数即转型函数可以用于任何数据类型, 而另外两个函数则专门用于把字符串转换成数值, 这3 个函数对于同样的输入会有返回不同的结果。
Number
如果是布尔值 ,返回0 1,
如果是数字值, 只是简单的传入和返回
如果是null, 返回0
如果是undefinded 返回NaN
console.log(Number(10)); // 10
console.log(Number(false)); // 0
console.log(Number(null));// 0
console.log(Number(undefined)); // NaN
如果是字符串, 遵循以下规则,
如果字符串只包含数字, 则将其转换为十进制, “011”会变为11, 注意前导零会被忽略
如果有浮点数值, 如1.1 , 则将其转换为对应的浮点数值, 同样会忽略前导零
console.log(Number("12344")); // 12344
console.log(Number("2.43")); //2.43
console.log(Number("002.43")); // 2.43
如果字符串中含有十六进制的格式, 则将其转换为相同的大小的十进制整数值。
console.log(Number("0xA")); //10
如果字符串为空, 则转换为 0
如果字符串包含除上述格式之外的字符, 则将其转换为NaN
如果是对象 则先调用对象的valueOf()方法, 然后依照前面的规则转换返回的值,如果转换的结果是NaN ,则调用对象的toString()方法, 然后再次依照前面的规则转换返回的字符串值。
parseInt()函数
由于Number函数在转换字符串时比较复杂而且不够合理。 因此在处理整数的时候 用的更多的是parseInt()函数, 它会忽略字符串前面的空格, 直至找到第一个非空格字符。 如果第一个字符不是数字字符或者负号, 就会返回NaN, 也就是说, 用他转换空字符串会返回NaN , 而Number返回的是0 , 解析完第一个数字字符后, 就会接着解析第二个数字字符, 直至解析完所有的数值字符或者是遇到一个非数字字符,
num = parseInt("1234bsdkf");
console.log(num);
num1 = parseInt("");
console.log(num1); // NaN
num2 = parseInt("0xa");
num3 = parseInt("22.5");
num4 = parseInt("070");
console.log(num2, num3, num4,);// 10 , 22 ,70
这里可以指定进制数
num_ = parseInt("070", 8);// 指定8进制。
console.log(num_);// 56
String类型
var age = 11;
var ageAsString = age.toString();
var found = true;
var foundAsString = found.toString();
console.log(ageAsString);
console.log(foundAsString);
3 String()方法。
使用范围, 在不知道要转换的值是不是null还是undefined的前提下, 可以使用String()方法, 它会首先对这个值调用toString()方法, 而剩下的情况无非就是我们使用它的原因了, 就是null 返回null, undefined 返回undefined。
var value1 = 10;
var value2 = "";
var value3 = null;
var value4;
console.log(value1, value2, value3, value4);//10 '' null undefined
Object类型
Object 的每个实例都具有下列属性和方法:
constructor: 保存着用于创建当前对象的函数。
hasOwnProperty(propertyName): 用于检查给定的属性在当前对象实例中是否存在,。
isPrototypeof(object) : 用于检查传入的对象是否是当前对象的原型。
propertyIsEnumerable(propertyName); 用于检查给定的属性能否使用for-in进行枚举。
toString(): 返回对象的字符表示
valueOf(): 返回对象的字符串。 数值, 或布尔值表示。 通常与toString的返回值相同。