前端基础之JavaScript数据类型

引言

javascript是一门前端必须达到精通程度的语言,为什么呢?javascript如今不再仅仅用来实现网页动画和交互,由javascript衍生出的产品开始涉及到后端,服务器等领域,所以它的强大足以使我们为之疯狂!

1.ECMAScript和JavaScript

简单来讲,ECMAScript是一种W3C标准,而JavaScript是对此标准的一种实现。

2.数据类型

数据类型分为基本数据类型和引用数据类型
基本数据类型:

  • number
  • boolean
  • null
  • undefined
    引用数据类型:
  • array
  • function
  • object
    特殊(行为与基本类型相似的不可变引用类型):
  • string

3.数据类型一:number##

合法的number类型示例:
100; // 整数100
0.5; // 浮点数0.5
1.2e3; // 科学计数法表示1.2x1000,等同于1200
-1; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
number四则运算示例:
1 + 2; // 3
(1 + 2) * 5 / 2; // 7.5
5 / 0; // Infinity
-5 / 0// -Infinity
Infinity / 0; // Infinity
-Infinity / 0; // -Infinity
0 / 0; // NaN
Infinity - 2; // Infinity
Infinity - Infinity; // NAN
Infinity / Infinity; // NAN
Infinity * Infinity; // Infinity
-Infinity * Infinity; // -Infinity
10 % 3; // 1
10.5 % 3; // 1.5
-10 % 3; // -1
-10.5 % 3; // -1.5
//注意:**NAN与任何number包括自己做运算都返回NAN**
注意:
a.对于NAN,与所有其他值都不相等,包括它自己。唯一能判断NaN的方法是通过isNaN()函数
NaN === NaN; // false
isNaN(NaN); // true
b.浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值。
1 / 3 === (1 - 2 / 3); // false
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

4.数据类型二:string##

JavaScript 的字符串是不可变的(immutable),String 类定义的方法都不能改变字符串的内容,而是返回新的字符串。

字符:

'A',"a",'\n','\x##','\u####'

字符串:

'I\'m \"OK\"!'; // I'm "OK"!
'\u4e2d\u6587'; // 中文

ES6多行字符串:

`我是谁?
我来自哪里?
我在做什么?`;//‘\n’ is replaced 

ES6模板字符串

var name = 'kingboss';
var age = 22;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
//原始方法:‘+’连接符

操作字符串方法

  • length //获取字符串长度
  • charAt // 返回在指定位置的字符
  • concat() // 连接字符串
  • indexOf() // 检索字符串
  • lastIndexOf() // 从后向前搜索字符串
  • match() // 找到一个或多个正则表达式的匹配
  • replace() // 替换与正则表达式匹配的子串
  • slice(start,stop) // 提取字符串的片断,并在新的字符串中返回被提取的部分
  • split() // 把字符串分割为字符串数组
  • substr(start,length) // 提取字符串中start索引开始指定length个字符
  • substring(start,stop) // 提取字符串中两个指定的索引号之间的字符
  • toLowerCase() // 把字符串转换为小写
  • toUpperCase() // 把字符串转换为大写
  • toString() // 返回字符串
  • valueOf() // 返回某个字符串对象的原始值

注意:substr和substring的区别在于参数负数的处理:当接收的参数是负数时,slice会将它字符串的长度与对应的负数相加,结果作为参数;substr则仅仅是将第一个参数与字符串长度相加后的结果作为第一个参数;substring则干脆将负参数都直接转换为0。

5.数据类型三:boolean##

boolean只有true和false两个值,下表是其他类型转换成boolean值对照:
数值类型转换成boolean值
undefinedfalse
nullfalse
booleantrue是true,false是false
number+0,-0和NAN是false,其他都是true
string如果字符串是空的(长度是0)是false,其他是true
objecttrue

6.数据类型四:null和undefined##

null表示一个空的值,而undefined表示值未定义。使用上,没必要区分两者。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。
注意:typeof(null)=> object ; typeof(undefined)=> undefined

7.数据类型五:array##

a.创建和初始化数组
var array1 = new Array();
var array2 = new Array(7);
var array3 = new Array('Monday',2,true,'kingboss');
var array4 = [];
var array5 = ['Monday',2,true,'kingboss'];
b.访问数组和length
console.log(array5.length);
console.log(array5[4]);//undefined,length+1
c.添加和删除元素
var array = [0,1,2,3,4,5];
array[2] = 'tow'; // [0,1,'two',3,4,5]
array.push(6,7); // [0,1,'two',3,4,5,6,7]
array.pop(); // [0,1,'two',3,4,5,6]
array.unshift(-2,-1); // [-2,-1,0,1,'two',3,4,5,6]
array.shift(); // [-1,0,1,'two',3,4,5,6]
array.splice(2,3); // [-1,0,4,5,6]
array.splice(2,0,999,999); //[-1,0,999,999,4,5,6]
array.splice(2,2,88,88); // [-1,0,88,88,4,5,6]
array.slice(2,5); //返回[88,88,4],但是原数组array不变
array.concat(['a','b','c']); // 返回[-1, 0, 88, 88, 4, 5, 6, "a", "b", "c"],但是原数组array不变
array.reverse(); // [6, 5, 4, 88, 88, 0, -1]
array.sort(); // [-1, 0, 4, 5, 6, 88, 88]
array.join(''); // "-104568888"

8.数据类型六:object##

JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。在 JavaScript 中,对象是拥有属性和方法的数据。对象除了内置对象以外也可以自定义对象。

自定义对象:

var person={
	firstname:"John",
	lastname:"Doe",
	age:50,
	"eye-color":"blue"
};
person.firstname; // "John"
person["eye-color"]; // "blue"
person.age = 20; // person.age => 20
delete person.lastname; // person.lastname => undefined
"lastname" in person; // false
"toString" in person; // true
person.hasOwnProperty("toString"); //false

内置对象:

  • Number
  • String
  • Date
  • Array
  • Boolean
  • Math
  • RegExp
  • Function

注意:虽然说JavaScript 中的所有事物都是对象,但是object作为一种js数据类型,与其它number,boolean,string是不严格相等的。上代码:

new Number(2) === 2 // false
new String("haha") === "haha" // false
new Boolean(true) === true // false

如果不加new,Number(),String(),Boolean()则变成转换函数,此时与包装器函数不同,上面的例子就相等了,上代码:

Number("2") === 2 // true
String(100) === "100" //true
Boolean(0) === false // true

9.数据类型七:function##

由于function涉及内容比较广,我会单独写一篇博文

10.关于typeof()##

判定规则:

  1. 对于数字类型,返回number
  2. 对于字符串类型, typeof 返回的值是 string
  3. 对于布尔类型, typeof 返回的值是 boolean
  4. 对于对象、数组、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object
  5. 对于函数类型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。
  6. 如 果运算数是没有定义的(比如说不存在的变量、函数或者undefined),将返回undefined。比如:typeof(sss)、typeof(undefined)都返回undefined。

11.数据类型判定方法经验总结##

由于typeof()方法对于array,null,object都返回“object”,所以依靠typeof不能完全区分所有数据类型,所以才有以下经验,摘自廖雪峰的javascript教程,与大家分享。

  • 不要使用new Number()、new Boolean()、new String()创建包装对象;
  • 用parseInt()或parseFloat()来转换任意类型到number;
  • 用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;
  • 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {…};
  • typeof操作符可以判断出number、boolean、string、function和undefined;
  • 判断Array要使用Array.isArray(arr);
  • 判断null请使用myVar === null;
  • 判断某个全局变量是否存在用typeof window.myVar === ‘undefined’;
  • 函数内部判断某个变量是否存在用typeof myVar === ‘undefined’。

任何对象都有toString()方法吗?null和undefined就没有!确实如此,这两个特殊值要除外,虽然null还伪装成了object类型。number对象调用toString()报SyntaxError:
123.toString(); // SyntaxError
遇到这种情况,要特殊处理一下:
123…toString(); // ‘123’, 注意是两个点!
(123).toString(); // ‘123’

结束语

学会总结也是程序员进步的法宝之一。作为一名前端仔,js的数据类型也许是最基本的,但是真要你系统地讲出来绝非易事。所以总结的同时也是提升自己的过程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值