JS基础知识|博客系列
# JS基础知识
# 1. 声明
# 1.1 声明变量
var 声明
基本的声明变量的方式是使用var来进行声明:
var a;
上面的语句表示声明了一个名为a的变量,由于它只是声明了,还未进行任何的赋值,所以此时使用console.log()在控制台打印出来的是undefined:
var a;
console.log(a);
console.log()方法能够在浏览器的控制台打印出你期望看到的元素,显示控制台快捷键为f12,或者直接在页面中右键“检查”。
声明提前
会把声明的语句提前到脚本的最前头,但不会把赋值的语句提前;
例:
console.log(a); //已经找到了a,因为var a 会被声明提前,但是却不会提前赋值,也就是不能找到a=10;
var a = 10;
console.log(a);
=>undefined 10 ; //第一个打印出undefined 第二个为10
# 1.2 声明并赋值
代码⌨️
var 变量名 = 值
var a = 10;
连续声明
var 变量名1,变量名2,变量名3;
var a,b,c;
var a = 1, b = 2, c = 3;
# 1.3 let声明变量
js中除了能够使用var操作符声明变量之外,还可以使用ES6中新增的操作符let进行声明:
let a = 10;
let和var在大多数时候的用法都是一样的,本质上都是为了声明一个变量,但是在一些情况上还是有一些区别,比如let声明的变量没有声明提前:
console.log(a);// 报错ReferenceError
let a = 10;
console.log(a)
在比如let不允许在相同作用域内,重复声明同一个变量。
// 报错
function () {
let a = 10;
var a = 1;
}
// 报错
function () {
let a = 10;
let a = 1;
}
具体的区别请移步
# 1.4 const声明常量
JS中除了有变量之外,也有常量。
常量顾名思义就是指定义了之后不能进行修改。
const定义的变量不可以修改,而且必须初始化
const a = 1;//正确
const b;//错误,必须要进行初始化
TIP
当然虽然你不能直接使用const b来进行声明,但是你可以采用const b = undefined的方式来声明一个值为undefined的常量,当然实际运用中这种做法也没有什么意义。
使用const声明了变量之后,若是你妄图重新赋值,则js会告诉你这个是不可以的。
const a = 1;
a = 2;//Uncaught TypeError: Assignment to constant variable.
console.log(a);
const定义引用类型
我们知道在js中的引用类型分为:值引用和地址引用。
上面介绍的都是值引用的情况,若是用const声明一个数组或者对象然后在进行修改情况会怎么样?
const arr = [1, 2, 3];
arr.push(4)
console.log(arr);//[1, 2, 3, 4]
const obj = { 'name': 'LinDaiDai' };
obj['sex'] = 'boy';
console.log(obj);//{ 'name': 'LinDaiDai', 'sex': 'boy' }
可以看到用const声明的数组和对象都是可以进行修改的,那么用const声明的对象和var有什么区别呢?
来看下面这个例子:
//如果你试图这样
const arr = [1, 2, 3];
arr = [2, 3, 4]; //Assignment to constant variable
console.log(arr);
//或者这样
const arr = [1, 2, 3];
var arr2 = [2, 3, 4];
arr = arr2;//Assignment to constant variable
console.log(arr);
使用const声明的地址引用常量你可以修改它的值,但不能够修改它的引用地址。
# 2. 内置类型
JS中分为七种内置类型,而这七种内置类型又会分为两大类型:基本类型和对象(Object)。
7种基本类型:null,undefined,boolean,number,string,symbol,bigint。
# 1. typeof
作用:返回一个值的数据类型
用typeof 测试出来的类型都是小写的
只能测试出6种类型:
-
number
-
boolean
-
string
-
undefined
-
object
-
function
1.原始类型
数值、字符串、布尔值分布返回 number、string、boolean
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
2.函数
函数返回function
function f() {}
typeof f
// "function"
3. undefined
undefined 和没有用 var 声明的变量,用``typeof返回的是undefined`
typeof undefined
// "undefined"
var x
typeof x
// "undefined"
4.object
除了以上三种情况,其他情况都返回object。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
注:
-
空数组
[]的返回值是object,这表示,JavaScript内部,数组本质上是一种特殊的对象。 -
null的返回值是object,这是由于历史原因造成的,1995年JavaScript语言的第一版,所有值都设计成32位,其中最低的3位用来表述数据类型,object对应的值是000。当时,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),完全没考虑null,只把它当作object的一种特殊值,32位全部为0。这是typeof null返回object的根本原因。 为了兼容以前的代码,后来就没法修改了。这并不是说null就属于对象,本质上null是一个类似于undefined的特殊值。
用法
实际编程中, typeof通常用在判断语句
var a = 10;
if (typeof a === "number") {
// ...
}
# 2. Number
JS 的数字类型是浮点类型的,没有整型,只能是实数,虚数不支持。
1. 整数
二进制 用0b 开头
字节:8个二进制位
八进制 用0或者0o(推荐)开头
十六进制 用0x开头
转换为二进制:每一个16进制位,用4个二进制位来表示
123 = 0001 0010 0011
2. 浮点数
3. 无穷大 Infinity (正无穷大和负无穷大)
1/0无穷大
4. NaN
NaN的特殊:
1.NaN 的typeof 的类型是 number;
2.NaN 转成数字类型是 NaN ;
3.NaN 转成布尔类型是 false;
4.NaN 转成字符串是 NaN ;
5.NaN == NaN =>false ;
6.NaN ===NaN =>false;
7.0/0 = NaN
# 3.Boolean
只有俩个值: true 和 false
# 5.Undefined
当声明一个变量但是并没有赋值时,或者没有声明的变量,变量的类型是Underfined类型
typeof(undefined);
=>undefined;
Number(undefined);//转成数字为NaN
=> NaN
undefined的特殊之处:
1.undefined 的typeof 的类型是 undefiend;
2.undefined 转成数字类型为 NaN;
3.undefined 转为布尔类型是 false;
4.undefined 转为字符串类型是 undefined ;
5.null == undefined => true;
# 6.Null
typeof(null);
=>object;
Number(null)
=> 0
null的特殊之处:
1.null 的typeof 的类型是 object;
2.null 转成数字类型为 0;
3.null 转为布尔类型是 false;
4.null 转为字符串类型是 null ;
5.null 和 任何非 null 都不相等;(但和undefined相等)
6.null == undefined =>true;
# 7. Symbol
Symbol是ES6新增的一种数据类型在ES5之前我们都没办法创建私有变量,只能想办法去封装.symbol 来创建私有成员
用法⌨️
//例1:
let firstName = Symbol(); //创建一个Symbol
let person = {};
person[firstName] = "王先生";
console.log(person[firstName]); // "王先生"
具体的用法请移步
# 8.Object
除了上述的六种基本数据类型,其他的数据都是Object类型
var obj = { 'name': 'LinDaiDai' };
var arr = [1, 2, 3];
console.log(typeof obj);
console.log(typeof arr);
# 3. 数据类型转换:
# 3.1 自动类型的转换
字符串,数字,boolean 之间的转换
字符串->数字:
1.如果字符串例的内容全部是数字,则转换为数字,否则就是NaN;
其实就是调用的一种叫做转换函数Number();
2.Number()内要是有一个内容不是数字,就会返回NaN
Number('123');
//123
Number('12a');
//NaN
数字->字符串:
把数字的字面形式转换为字符串
若是数字+字符串,则会进行隐式类型转换,讲数字转换成字符串,然后进行字符串相加
123 + '456'
//'123456'
内部调用的是转换函数String()
字符串,数字->布尔值:
0,-0,"",undefined,null,false,NaN ->这七种是转换为false,其余的全当做true来用("0"," "是true);
如一下几种加上!都会转换为true.
var num = 0,
a = null,
b = NaN,
c;
!num //true
!a //true
!b //true
!c //true
布尔值 -> 字符串:
true -> “true”
