JavaScript的数据类型与变量

JavaScript的数据类型

基本数据类型
字符串(String)、数字 (Number)、布尔 (Boolean)、空值(Null)、未定义(Undefined)、唯一值(Symbol)、BigInt。
注意:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。BigInt也是新增数据类型。
引用数据类型
对象 (Object)
注意:
1.数组 (Array)和函数(Function) 都是对象来的。
2.typeof 函数(Function) 得到的结果是function,所以有些时候引用数据类型被当作Object和Function

基本数据类型存放在栈(stack)中,引用数据类型存放在堆(heap)中。
js 的变量数据类型是只有程序在运行过程中,根据等号右边的值来确定的,变量的数据类型是可以变化的。

数字型

JavaScript 数字类型既可以保存整数,也可以保存小数(浮点数)。
浮点数运算是不准确的,尽量避免浮点数相等比较。

  • 在JS中八进制前面加0,十六进制前面加 0x
  // 1.八进制数字序列范围:0~7
 var num1 = 07;   // 对应十进制的7
 var num2 = 019;  // 对应十进制的19
 var num3 = 08;   // 对应十进制的8
  // 2.十六进制数字序列范围:0~9以及A~F
 var num = 0xA;
  • 数字型范围
    最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308
    最小值:Number.MIN_VALUE,这个值为:5e-32
    (e表示乘以10,e后面的数字表示次方)
  • 数字型三个特殊值
    Infinity ,代表无穷大,大于任何数值
    -Infinity ,代表无穷小,小于任何数值
    NaN ,Not a number,代表一个非数值
    注意:NaN和NaN是不相等的。(将Not a number理解成一个非数字的集合,既然是集合那里面就有很多非数字的元素啦,而NaN是表示非数字集合中的其中某一个元素,比如是’a’;而另一个NaN又是另一个非数字元素,比如是’b’;那么判断NaN==NaN,相当于判断’a’== ‘b’,它们就不相等了。)
if(NaN==NaN)  // false
  • isNaN
    用来判断一个变量是否为非数字的类型,返回 true 或者 false
   var usrAge = 21;
   var isOk = isNaN(userAge);
     console.log(isOk);          // false ,21 不是一个非数字
   var usrName = "andy";
     console.log(isNaN(userName));// true ,"andy"是一个非数字
  • 转换成 保留几位小数 的形式
    Number对象中的toFixed( )方法可以将数值转换成保留几位小数的形式,但是它的返回值变成字符串类型。它会将原来的数进行四舍五入截取,而且也是有 点5 不准确问题的
// toFixed 接收一个参数表示需要保留的位数,最多可以保留20位小数
console.log(Number(1.335).toFixed(2)); // 1.33
  • 把数字格式化为指定的长度
    Number对象中的toPrecision( )方法可以将数值格式化为指定的长度,返回值是一个格式化好的字符串。如果原来数值的整数部分已经大于指定长度,那么会用科学计数法表示,多出部分四舍五入。如果原来数值的整数部分小于指定长度,会继续保留小数部分,小数多出部分四舍五入,小数不足的话就补零。(不准确)
console.log(Number(1.335).toPrecision(20)); // "1.3349999999999999645"

字符串型

双引号或者单引号包围内容,因为 HTML 标签里面的属性使用的是双引号,JS 中推荐使用单引号。

  • 字符串转义符
转义符解释说明
\n换行符,n 是 newline 的意思
\ \斜杠 \
’ 单引号
"”双引号
\ttab 缩进
\b空格 ,b 是 blank 的意思
  • 字符串长度
    通过length属性获取
  • 字符串拼接
    多个字符串之间可以使用 + 进行拼接,其拼接方式为 字符串 + 任何类型 = 拼接之后的新字符串
    拼接前会把与字符串相加的任何类型转成字符串,再拼接成一个新的字符串

布尔型

布尔类型有两个值:true 和 false ,其中 true 表示真(对),而 false 表示假(错)。
布尔型和数字型相加的时候, true 的值为 1 ,false 的值为 0。

console.log(true + 1);  // 2
console.log(false + 1); // 1

Undefined

Undefined类型中只有一个值,就是undefined
undefined没有指针,没有占位符。undefined的值是派生自null的,undefined可以当作关键字。

undefined会在以下情况中出现:

  1. 一个声明后没有被赋值的变量会有一个默认值undefined ( 如果进行相连或者相加时,注意结果)
  2. 获取一个对象上不存在的属性或者方法
  3. 获取一个数组中没有被赋值的元素
var variable;
console.log(variable);           // undefined
console.log('你好' + variable);  // 你好undefined
console.log(11 + variable);     // NaN      标记一下,这条要记得
console.log(true + variable);   //  NaN
console.log(undefined == null);   //  true
console.log(undefined === null);   //  false

Null

null是空指针,有个占位符。
一个声明变量给 null 值,表示里面存的值为空(学习对象时,我们继续研究null),算术运算中null 的值为 0

var vari = null;
console.log('你好' + vari);  // 你好null
console.log(11 + vari);     // 11 标记一下,这条要记得,不是输出NAN,而是11
console.log(true + vari);   //  1

检测变量属于哪种数据类型的方法

typeof 可用来获取检测变量的数据类型,它返回值是一个字符串

var num = 18;
console.log(typeof num) // 结果 number 
console.log(typeof num []) // 结果 object
console.log(typeof num null) // 结果 object

严格检查变量类型

Object.prototype.toString.call(data); //data是要检测的变量

instanceof 用来断言变量是否属于某个类型,在判断类的继承中不是很严谨。

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);

console.log(auto instanceof Car); // true
console.log(auto instanceof Object); // true

通过 constructor 属性返回其 JavaScript 变量的构造函数来断言类型

false.constructor                  // 返回函数 Boolean() { [native code] }
[1,2,3,4].constructor              // 返回函数 Array()   { [native code] }

/*比如判断是否为数组*/
function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}

数据类型转换

  • 转换为字符串
    在这里插入图片描述
    注意:
    toString() 和 String() 使用方式不一样。
    三种转换方式,更多第三种加号拼接字符串转换方式, 这一种方式也称之为隐式转换。
  • 转换为数字型
    使用一元运算符 + 来转换
var y = "5";      // y 是一个字符串
var x = + y;      // x 是一个数字

也可以使用下面的方法来转换
在这里插入图片描述
注意:
parseInt 和 parseFloat 单词的大小写,这2个是重点
隐式转换是我们在进行算数运算的时候,JS 自动转换了数据类型

  • 转换为布尔型
    在这里插入图片描述
    注意:
    代表空、否定的值会被转换为 false ,如 ‘’、0、NaN、null、undefined
    其余值都会被转换为 true
console.log(Boolean('')); // false
console.log(Boolean(0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean('小白')); // true
console.log(Boolean(12)); // true

JavaScript变量

变量就是存放数据的容器。在 JavaScript 中,对象和函数同样也是变量。
变量的本质就是内存里的一块空间,声明变量本质就是去内存申请空间。

var 是一个 JS关键字,用来声明变量( variable 变量的意思 )。使用该关键字声明变量后,计算机会自动为变量分配内存空间,不需要程序员管理。
变量名字最好不要叫name,name在有些浏览器当中是关键字的。
变量的初始化

var a=18; // 正常声明变量和初始化
var a1=0,a2=1; //同时声明多个变量,可以用逗号隔开
var b; // b的值是undefined
var c,d=2; // c是undefined,d是2
var e=f=3; // e和f都是3,相当于 var e=3; f=3; 注意这种写法只有第一个变量是有关键字声明的
var g=4;
var g; //再次声明同一个名字的变量但是不赋值,g还是4
var h=5;
var h=6; //再次声明同一个名字的变量而且赋值,h变成6
i=7; // 未声明就直接使用名字赋值,虽然不会报错但是不提倡这样做
j; // 未声明又未赋值直接使用变量,会报错

局部变量和全局变量
1.在 JavaScript 函数内部声明的变量(使用 var)是_局部_变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。局部变量会在函数运行以后被删除。
2.在函数外声明的变量是_全局_变量,网页上的所有脚本和函数都能访问它。全局变量会在页面关闭后被删除。
3.如果您把值赋给尚未声明的变量,该变量将被自动作为 window 的一个属性。非严格模式下给未声明变量赋值创建的全局变量,是全局对象的可配置属性,可以删除。使用var声明的变量是不可删除的。
注意:
全局变量,或者函数,可以覆盖 window 对象的变量或者函数。
局部变量,包括 window 对象可以覆盖全局变量和函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值