JavaScript学习笔记(一)JS的数据类型(1)

修改于2019/3/3:
https://biaoyansu.com/12.14
增加整数的判断方式Number.isInteger()、整数的转换parseInteger()、浮点数的转化parseFloat()、快速转化
string数据类型的一些操作函数
null和undefined做了一点修改

一提到JS的数据类型,好像大家都会讲六个数据类型:
num、string、boolean、object、undefined、null,还有近期频繁出现的一个神秘的第七个数据类型:symbol。
今天我想把数据类型相关的我已经了解到的东西整理一下,一是为了对知识进行归纳和整合,二是备份。
我想把这部分分为几个部分:

  • 对基本6种数据类型的小结
  • 基本数据类型和引用数据类型
  • 类型判断方法小结
  • symbol的简单介绍
  • JS数据类型相关面试题的总结

这篇博客主要讲第一部分和第二部分。

1. 6种数据类型

这一部分主要参考W3School:http://www.w3school.com.cn/js/js_datatypes.asp
廖雪峰老师的网站:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434499190108eec0bdf14e704a09935cd112e501e31a000
还有一些优秀的博客:
https://www.cnblogs.com/phillyx/p/5603738.html https://www.cnblogs.com/chenpingzhao/p/4888787.html
在ECMAScript 5.1的标准中,JS有6种基本的数据类型:string、num、boolean、null、undefined、object。
(1)num
JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型:

123; // 整数123
0.456; // 浮点数0.456
1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5
-99; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

num可以使用四则运算。注意一些运算结果:

2 / 0; // Infinity
0 / 0; // NaN

NaN的检测函数:(NaN与其他任何数都不相等)
isNaN(待检测对象)。如果是待检测对象是NaN,则返回true,否则返回false.
为true的情况只有如下几种:

Number.isNaN(NaN);        // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0)       // true

以及NaN不等于NaN
整数
判断是否为整数:

Number.isInteger(1);//true
Number.isInteger(1.1);//false

其他类型转整型

parseInt('1') // 1
parseInt('1.1') // 1
parseInt('1.9') // 1
parseInt('1a') // 1注意字符串的只取开头整数
parseInt('a1') // NaN
parseInt('.9') // NaN
parseInt('0.9') // 0

用于条件语句判断时,0为false,其他都为true

!!0 // false
!!1 // true
!!0.1 // true
!!-1 // true

浮点数
转型:

parseFloat('1') // 1
parseFloat('1.0') // 1
parseFloat('1.1') // 1.1
parseFloat('1.1a') // 1.1
parseFloat('a1.1') // NaN
parseFloat('.1') // 0.1

快速转换
在其他类型前加上“+”可将其转化为number类型。

+'1' // 1
+'' // 0
+'1.1' // 1.1
+true // 1
+false // 0

(2)boolean
和其他的语言一样,JS的布尔类型也有两个取值:true和false。但是和一些语言,例如C/C++不一样的是,JS的布尔值只能取true或者false,不能用1或者0来代替。
boolean的创建则是最好使用Boolean()函数来创建。
如果用new Boolean()方法来创建,则创建的是一个值为true或者false的对象。具体值的确定如下:

数据类型truefalse
Booleantruefalse
String任何非空的字符串“”
Number任何非0数值(包括无穷大)0和NAN
Object任何对象null
Undefined不适用undefined
//false
var bNoParam = new Boolean();
var bZero = new Boolean(0);
var bNull = new Boolean(null);
var bEmptyString = new Boolean("");
var bfalse = new Boolean(false);
 
//true
var btrue = new Boolean(true);
var btrueString = new Boolean("true");
var bfalseString = new Boolean("false");
var bSuLin = new Boolean("aaa");

同时,可以使用“!!”将一个对象强制转换为true or false。

var test=!!o.flag;//等效于var test=o.flag||false;  

但是,如果使用常见的true or false的检测方法,则会出现错误哦。

var x = new Boolean(false);
 
if(x){
    console.log(x.valueOf(),typeof x); // false  object
}

这段代码会被执行。因为检测的是x是否存在,作为一个object,它当然是存在的。

(3)string
字符串是以单引号’或双引号"括起来的任意文本,比如’abc’,"xyz"等等。请注意,单引号或者双引号本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。
string的创建方式

var str1 = "javascript"; //typeof str1 == string
var str2 = String("javascript"); //typeof str2 == string 不推荐
var str3 = new String('javascript'); //typeof str3 == object

string和new String()的区别:

s1 = "2 + 2";               // creates a string primitive
s2 = new String("2 + 2");   // creates a String object
console.log(eval(s1));      // returns the number 4
console.log(eval(s2));      // returns the string "2 + 2"

也就是说使用对象的时候,string不会做类型转换。
此时如果想要执行string中的代码,则需要利用eval方法。

console.log(eval(s2.valueOf())); // returns the number 4

常用方法:
获取字符串中的字符

//第一种方式:charAt(下标)函数
“abc”.charAt(0);//"a"
//第二种方式,直接当成数组,取下标
"abc"[0];//"a"

检查a字符串是否包含b字符串

'花花你好'.includes('花花'); // true
'花花你好'.includes('不啊'); // false

字符串分割

'花花→_→拴蛋→_→背背'.split('→_→'); // ["花花", "拴蛋", "背背"]

连接字符串

'y'.concat('ooo', 'oo', 'o'); // "yoooooo",依次连接传入的字符,传参数量不限

截取字符串

var str = '王花花和小熊跳舞跳呀跳呀一二一'; 
str.slice(3, 8); // "和小熊跳舞",第一个传参为开始索引,第二个传参为结束索引
str.slice(3); // "和小熊跳舞跳呀跳呀一二一",若省略第二个传参将会截取至最后一个字符

移除两头空格

'  yo  '.trim(); // "yo"
'  yo'.trim(); // "yo"

(4)null
null是一个字面量,不是全局对象的一个属性。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回object的原因。
当我们创建了一个对象,想要保存这个对象,但是暂时不需要给他赋值的时候,就需要给它赋一个初值null。(null必须手动赋值,JS自己不会赋值)
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了。
例如:

if(car != null){
    //对car对象执行某些操作
  }

null是false
(5)undefined
Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。与null不同,undefined是一个全局对象的属性。可以通过window.undefined来访问。
一个未初始化的变量的值为undefined,一个没有传入实参的形参变量的值为undefined,如果一个函数什么都不返回,则该函数默认返回undefined.
你可以使用严格相等运算符来判断一个值是否是undefined:

var foo;
console.log(foo === undefined);//true
console.log(typeof foo === 'undefined');//true
console.log(window.foo === undefined);//true
 
console.log(bar === undefined);//Uncaught ReferenceError: bar is not defined
console.log(typeof bar === 'undefined');//true
console.log(window.bar === undefined);//true

null和undefined的区别

console.log(foot);//Uncaught ReferenceError: foot is not defined

var foo;
console.log(foo);//undefined
 
var bar =null;
console.log(bar);//null
 
typeof null        // object (bug in ECMAScript, should be null)
typeof undefined   // undefined
null === undefined // false
null  == undefined // true

undefined也是假
(6)object

JS中一切皆可对象。object其实就是一组无序数据对。

var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

object的相关我现在还没有理得很清楚。后续会有专门的博客来写object。

2. 基本数据类型和引用数据类型

这一部分参考
https://www.cnblogs.com/CandyManPing/p/5386767.html
首先我们需要知道,在ECMAScript标准中,JS的数据类型分为两大类:基本数据类型、引用数据类型。
其中基本数据类型保存在栈中,引用数据类型保存在栈中。NumberStringBooleanNullUndefinedSymbol都属于基本类型。
引用数据类型保存在堆内存中。意思是,变量中保存的实际上只是一个指针,这个指针指向内存堆中实际的值。Object、ArrayFunction则属于引用类型。
寻址方式
引用数据类型:
(1)object
创建一个object有两种方式:
一是new一个object对象

var person = new Object();
//然后创建这个对象的不同属性并赋值
person.name = "abc";
person.age = 11;

也可以直接通过对象字面量表示法来进行创建

var person = {
name:"abc";
age:11;
}

(2) Array
JS中的数组的特殊之处在于,数组内的每一个元素的数据类型都可以不一样。

var person = new Array("aaa",11);

(3) Function
两种定义方式:

//1
function a(){
	return 1;
}
//2
var sum = function(){
	return 1;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值