JS变量、数据类型

74 阅读5分钟

JS基础

变量

//定义变量
var a,b                 //定义变量a 变量 b
​
//变量赋值
var a
a = 100
var b = 200             //a赋值为100  b赋值为200
​
//输出变量
var a = 100
console.log(a)          //输出变量a的值 为100

数据类型

//数字类型(number)  不区分整数和浮点数
var a = 100             //定义变量a的值为数字100
var b = 200             //定义变量b的值为数字200//字符串类型(string) 以引号包裹的内容,就是字符串类型
var a = '100'           //定义变量a的值为字符串100
var b = 'abc'           //定义变量b的值为字符串'abc'//布尔类型(boolean) 更多用在判断上,一个值为true,一个值为false
var a = true            //定义变量a的值为真true
var b = false           //定义变量b的值为假false//undefined(未定义)    如果变量没有赋值默认undefined ,表明未定义
var a
console.log(a)          //此时,变量a的值为undefined//null(空)
var a = null            //定义变量a的值为空

检测数据类型

var a = 100
console.log(typeof(a))      //检测变量a的数据类型 为number
var b = 'abc'
console.log(typeof(b))      //检测变量b的数据类型 为string
var c = true
console.log(typeof(c))      //检测变量c的数据类型 为Boolean
var d = null
console.log(typeof(d))      //检测变量d的数据类型为object
var e 
var f = undefined
console.log(typeof(e))      
console.log(typeof(f))      //检测变量 e和 f的数据类型为undefined

数据类型转换

转换数字类型

//number(数据)
    //可以用任何数据类型,转换成数字类型,其他类型的字符串会转换成 NaN
    //null 或者 空白值 会转换成 0;
    //true 会转换成 1,false会转换成 0;//数据的类型         //数据的值
console.log(typeof(Number('100')),Number('100'))
console.log(typeof(Number(null)),Number(null))
console.log(typeof(Number(true)),Number(true))
console.log(typeof(Number(false)),Number(false))
​
​
//parseInt(数据)
    //转换为number类型,并且值为整数(直接忽略小数点以后的值,并不是四舍五入)
    //如果数据是纯数字的字符串,或者以数字开头的字符串,那么会转换成数字,否则转换成NaN//数据的类型         //数据的值
console.log(typeof(parseInt('100')),parseInt('100'))
console.log(typeof(parseInt('100abc')),parseInt('100abc'))
​
​
//parseFloat(数据)
    //转换结果与parseInt类似,但是在转换小数时,会保留小数点以后的数字
​
​
                    //数据的类型         //数据的值
console.log(typeof(parseFloat('100')),parseFloat('100')) 
console.log(typeof(parseFloat('100ab')),parseFloat('100ab'))
console.log(typeof(parseFloat(100.123)),parseFloat(100.123))
​
​
//在实际开发中,常用 “数据 - 0”的方式,转换成数字类型
console.log(typeof('100' - 0),'100' - 0)

转换字符串类型

//string(变量)
    //所有类型转换成字符串
var a = 100
var b = string(a)           //将变量a的值转换成字符串类型,并且赋值给b//变量.tostring()
var a = 100
a.tostring()                //将变量a的值转换成字符串类型

转换布尔类型

//Boolean(数据)
    //在js中,之后''(空字符串,有空格也不行) 0null,undefined,NaN,这些是false
    //除了上述的 ,其余全部为true
var a = 100
Boolean(a)                  //将变量a的值 转换为布尔类型,并且值为true

数据类型区别

//数据类型分为两种
    //1.基本数据类型(简单数据类型)
    //2.引用数据类型(复杂数据类型)

存储

//1.存储
    //变量的数据存储的地方是内存 内存分为两个: 栈内存 堆内存
    //1.1基础数据类型:存储的是值,存储在栈内存中 比如:string number undefined null Boolean
    //1.2引用数据类型:存储的是地址,将数据本体存放在堆内存中,然后将指向该内存的地址,存放在object名、array名、function名中,这些名默认存放 在栈内存中 比如:object array function 
var num = 100
var str = 'abc'                     //存储在栈内存中
var obj = {
    a:1,
    b:2,
}
var arr = {1,2,3,4}                 //数据本体存在堆内存中,地址存名中,名存在栈内存中

赋值

//2.赋值
	//2.1基础数据类型:赋值以后,两个变量没有任何关系,相当于将自己某一个东西,复制一份出去
var num1 = 100
var num2 = num1						//num2 === num1 === 100
num2 = 666
console.log(num1)
console.log(num2)					//num1为 100  num2为 666
	//2.2引用数据类型:变量内部存储的是指向堆内存的地址,赋值时,其实是将这个地址给到另一个变量,那么相当于这两个变量存储的是同一个钥匙,所以操作其中一个变量时,会影响另一个变量
var obj1 = {
    name:'abc',
    age: 18,
}
var obj2 = obj1				//这一步相当于将变量 obj1内部存储的”钥匙“ ,给到了变量obj2 
console.log(obj2)		

比较

//3.比较
	//3.1基本数据类型:值的比较
var num1 = 100
var num2 = 100
console.log(num1 === num2)			//true
	//3.2引用数据类型:比较时,比较的是 地址
var obj1 = {
    name:'abc',
    age: 18
}
console.log(obj1 === obj2)  		//false
var arr1 = [1,2,3]
var arr2 = arr1
console.log(arr1 === arr2)  		//true

传参

//4.传参
	//4.1基本数据类型:将值拷贝一份传递给形参,在函数内修改不会影响外界
function fn(num){
    num = 'abc'
}
var str = 'aaa'
fn(str)
console.log(str)					//'aaa'
	//4.2引用数据类型:将存储地址赋值给形参,在函数内修改会影响外界
function fn(o){
    o.name = 'qwer'
}
var obj = {
    name: 'abc'
}
fn(obj)
console.log(obj.name) 				//'qwer'

!案例

//案例
var obj = {
  	name: 'jack'
}								//创建一个便俩把那个叫做obj,数据本体{name:jack}
 function fn(){					// 定义一个 fn函数, 没有调用 所以直接向下走
   	obj.name = 'rose'
   	obj = {}
    obj.name = 'jerry'
  	console.log(obj.name)			//输出的值为jerry
}
fn()
console.log(obj.name)				//输出的值为jerry(全局变量)