<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>dataType</title>
<script>
/*
1, 5种简单数据类型:Undefined, Null, Boolean, Number, String
1种复杂数据类型;Object -- 本质上是由一组无序的名值对组成的
ECMAScript不支持任何创建自定义类型的机制(比如Java),所有的值最终都将是上述6种数据类型之一
2,typeof操作符(见下) -- 检测给定变量的数据类型
注意点:若返回的字符串为“object”,则这个值的类型可能是对象或者null
3,Undefined类型:只有一个值undefined(一般不会显示书写)
a, 使用var声明的变量但未对其加以初始化时,该变量的值就是undefined
4,Null类型:只有一个值null(表示一个空对象指针)
a,如果定义的变量将来用于保存对象,则最好将该变量初始化为null而不是其他值
b,underfined值派生自null值,其两者判断返回true
5,Boolean类型:使用最多的一种类型 true and false
ECMAScript中所有类型的值都有与这两个Boolean值等效的值 -- Boolean()函数
Boolean()函数转换: true --> 非空,非0,非false,NaN
6,Number类型:3种进制
a, 浮点数值:ECMAScript会将可以作为整数的浮点数值转换为整数值
b, ECMAScript会将小数点后面6个0以上的浮点数转换为e表示法表示的数值
c, 永远不要测试某个特定的浮点数值(基于IEEE754数值浮点计算)
IEEE 754 标准是IEEE浮点数算术标准
if(0.1 + 0.2 == 0.3){
alert("you've got 0.3");
}
d, Number.MAX_VALUE:ECMAScript能够表示的最大值
Number.MIN_VALUE:ECMAScript能够表示的最小值
isFinite()函数 --> 判断一个数是否为有穷数
Number.NEGATIVE_INFINITY:负的Infinity的值
Number.POSITIVE_INFINITY:正的Infinity的值
e, NaN(Not a Number):非数值,表示未定义或不可表示的值,或者说,表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误)
特点:第一,任何涉及NaN的操作(例如NaN/10)都会返回NaN;
第二,NaN与任何值都不相等,包括NaN本身
isNaN()函数:(1)确定接收的参数是否为“不是数值”
接收到一个值,并将这个值转换成为数值
--> 某些不是数值的值会直接转换成数值,例如"10" or Boolean
--> 任何不能被转换成数值的值都会导致这个函数返回true
(2) 传入对象
valueOf() --> toString()
f, 非数值转换成数值:
Number(): 可用于任何数据类型,转换字符串时不常用
parseInt(): 字符串 --> 数值 解析数字字符
parseFloat(): 字符串 --> 数值
7,String类型:
a,ECMAScript中的字符串是不可变的,即字符串一旦创建,他们的值就不能改变
b,转换为字符串:
(1) toString()方法:返回相应值的字符串表现【明确值不是null or undefined时使用】
数值、布尔值、对象和字符串值都有toString()方法,但null和undefined值没有
特殊:调用数值的toStirng()方法时,可以加一个基数
(2) String()函数:将任何类型的值转换为字符串【不明确值是不是null or undefined时使用】
(3) 加号操作符
8,object类型:
ECMAScript中的对象是一组数据和功能的集合
对象可以通过执行new操作符后跟要创建的对象类型的名称来创建
创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象
var o = new Object();
b,Object类型是所有它的实例的基础,即Object类型所具有的任何属性和方法也同样存在于更具体的对象中
c,Object的每一个实例都具有下列的属性和方法:
Constructor:构造函数。保存着用于创建当前对象的函数
hasOwnProperty(propertyName) // 参数为字符串形式
isPrototypeof(object)
propertyIsNumerable(propertyName) // 参数为字符串形式
toLocaleString() // 返回对象的字符串表示 ,与执行环境地区有关
toString() // 返回对象的字符串表示
valueOf() // 返回对象的原始值
*/
// var message = "some string";
// alert(typeof message);
// alert(typeof message);
// alert(typeof 98 );
// alert(typeof null); // 特殊值null被认为是一个空的对象的引用,返回一个object
// var abab;
// alert(abab);
// Undefined类型
// var gender;
// // alert(gender); // 声明但未初始化 -- undefined
// alert(typeof gender);
// alert(typeof age); // 未声明的变量只能使用typeof操作符检测该变量的数据类型 -- undefined
// // 对未初始化和未声明的变量执行typeof操作符都返回了undefined值 --> 显式地初始化变量是个好习惯,此时,若typeof返回"undefined"值时,则表示检测到的这个变量还没有声明
// alert(age); // 发生错误,因为age未声明
// ----------------------------------------
// Null 类型
// alert(null == undefined);
// ----------------------------------------
// Boolean类型
// var found = true;
// var lost = false;
// alert(found); // true 不一定是1
// alert(lost); // false不一定是0
// alert(found + lost); // 1
// var message = "hello world";
// // var messageAsBoolean = Boolean(message);
// // alert(messageAsBoolean);
// if (message){ // 自动执行Boolean转换
// alert("Value is true");
// }
// ----------------------------------------
// // Number类型
// var aInt = 10; // 十进制
// var octalNum1 = 089; // 八进制,以"0"开头
// var hexNum = 0xD; // 十六进制,以"0x"开头
// // 算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制数值
// var aNum = .32; // 不推荐
// var bNum = 1.0; // 浮点数本身是一个整数,该值会被转换成整数
// var floatNum = 3.14e8; // 使用“e表示法”表示极大值
// var floatNum = 3.21e-8; // 使用“e表示法”表示极小值
// var floatNum2 = 0.00000000343; // 自动转换为e表示法
// // alert(floatNum2);
// // alert(0.1 + 0.2);
// if(0.1 + 0.2 == 0.3){ // do not do such test!!
// alert("you've got 0.3");
// }
// var result = Number.MAX_VALUE + Number.MAX_VALUE;
// alert(isFinite(result));
console.log(231 / 0); // infinity
console.log(0 / 0); // NaN
// console.log(NaN == NaN);
// console.log("-----------");
// console.log(isNaN(NaN));
// console.log(isNaN(10));
// console.log(isNaN("10"));
// console.log(isNaN(true));
// console.log(isNaN("blue"));
// // 数值转换 //
// console.log(Number(undefined)); // NaN
// console.log(Number(0x67));
console.log(null);
// // 字符串时
// console.log(Number(' ')); // 0 空字符串输出的结果
// console.log(Number("00012")); // 12
// console.log(Number('DFS12')); // NaN
// console.log(Number(' 123'));
// console.log('-----------');
// console.log(parseInt(" ")); // NaN 空字符串输出的结果
// console.log(parseInt("ui22221")); // NaN 如果第一个字符不是数字字符或者负号,则parseInt()会返回NaN
// console.log(parseInt(" 12.31")); // 12 忽视字符串前面的空格,直到遇到第一个非空格字符
// console.log(parseInt("2231blue"));
// console.log(parseInt("0x89"));
// console.log(Number("00012")); // 12
// var num1 = parseInt('0xAF',16); // 175
// var num2 = parseInt('AF',16); // 175 指定16作为第二个参数,字符串可以不带前面的“0x”
// var num3 = parseInt('AF'); // NaN
// var num4 = parseInt('10',2);
// var num4 = parseInt('10',8);
// var num4 = parseInt('10',10);
// // 为了避免错误解析,无论何时下都明确指定基数
// console.log(parseFloat(" 12.313.21")); // 12.313
// console.log(parseFloat("0x23")); // 0
// console.log(parseFloat("0987.21"));
// console.log(parseFloat("125blue"));
// 注意:parseFloat()与parseInt()区别:
// 1, 第一个小数点有效,第二个小数点无效
// 2, 十六进制的字符串始终都会被转换成0(见上)
// String类型
// 单引号与双引号无区别
var text = "this is an example text!";
console.log(text.length); // length返回字符串的数目
var lang = 'Java';
lang = lang + 'Script';
console.log(lang);
age = 11;
found = true;
ageAsString = age.toString();
foundAsString = found.toString();
// 加基数
var num12 = 12;
console.log(num12.toString());
console.log(num12.toString(2)); // 1100
console.log(num12.toString(8)); // 14
console.log(num12.toString(10));
// String()函数
var num123 = 123;
var blank;
var nullValue = null;
console.log(String(num123));
console.log(String(blank)); // undefined
console.log(String(nullValue)); // null
// 加号操作符
var addStringValue = 12 + '123';
console.log(addStringValue);
console.log(typeof addStringValue);
console.log('***********');
// Object类型
var o = new Object();
console.log(o.constructor);
console.log(o.hasOwnProperty('name'));
console.log(o.propertyIsEnumerable('name'));
console.log(o.toLocaleString());
console.log(o.toString());
console.log(o.valueOf());
console.log("-----------");
var arrN = new Array();
console.log(arrN.constructor);
console.log(arrN.hasOwnProperty('name'));
console.log(arrN.propertyIsEnumerable('name'));
console.log(arrN.toLocaleString());
console.log(arrN.toString());
console.log(arrN.valueOf());
</script>
</head>
<body>
</body>
</html>
让学习“上瘾”,成为更好的自己!