js基本数据类型

js中数据类型


  • js的数据类型
    • 基本数据类型
      • 数字 number
      • 布尔 boolean
      • 字符串 string
      • null 空 本身保留位置,之后可以添加值
      • undefined 未定义 本应有值,但是未定义值
    • 引用数据类型
      • 对象 object
        • 对象类 Object
        • 数组类 Array
        • 正则类 RegExp
        • 数学算数类 Math
        • 字符串类 String
        • 数字类 Number
      • 函数 function
  • number 数字
    • Number() 将其他数据类型转为数字数据类型,如果传入的值有一个不是数字,返回NaN,否则返回数字
      • 对象–> 数字 对象转为字符串,字符串转为数字
        • {}.toString() –> “[object Object]” –> NaN
        • [].toString() –> “” –> 0
      • 字符串 – > 数字
      • null – > 0
      • undefined –> NaN
      • true – > 1 false –> 0
    • parseFloat(value) 能识别小数,从值的左侧查找到右侧,如果是数字就返回数字,如果遇到非数字停止查找,如果第一个值就不是数字,返回NaN
    • parseInt(value) 识别整数部分,从值的左侧查找到右侧,如果是数字就返回数字的整数部分,如果遇到非数字停止查找,如果第一个值就不是数字,返回NaN
    • isNaN(value) 判断一个值,不是一个数字
      • true 不是数字
      • false 是数字
  • boolean 布尔
    • Boolean(value) 将其他数据类型转为布尔类型(判断一个值是真是假)
      • true
      • false
    • !value 先将value转为布尔类型,然后取反
    • !!value 将其他数据类型转为布尔类型,先将value转为布尔类型,然后取反再取反
    • 0 NaN “” null undefined 为false 其余都为真
      • !{} –> false

布尔运算不需要将值转为任何数据类型,直接根据五个值为假进行判断

Boolean([]);
不应该继续转化
Boolean('');  ×
Boolean(0);   ×
  • 字符串 string

    • 字符串在js中是用来储存字符的一个变量,用引号将字符包起来,那么包起来的部分无论是代码还是其他,都没有任何意义
    <script>
        "alert('晓丰嘿嘿嘿')"
        alert('晓丰呵呵呵')
    </script>
    • 引号可以使用双引号也可以使用单引号,如果是嵌套使用,双引号和单引号需要交叉使用
    "alert("xxx")" 错误
    "alert('xxx')" 正确
    'alert("xxx")' 正确
    • 任何数据类型+字符串 都是字符串拼接
      1+"" -- > "1"
      var str={};
      var str1=str+"abc";// "[object Object]abc"
  • Object 对象类

    • 对象类的实例
    • 如何创建一个对象实例
      • 字面量 var obj={}
      • 实例创建 var obj=new Object();
      • 给对象添加键值对(新增属性)
        • obj.newName=newValue;
        • obj[“newName”]=newValue;
      • 修改将原有的属性中的属性值进行修改
        • obj.oldName=newValue;
        • obj[“oldName”]=newValue;
      • 删除
        • 将键值对完全删除
          • delete obj.oldName
          • delete obj[‘oldName’]
        • 删除属性值,保留属性
          • obj.oldName=null;
          • obj[“oldName”]=null;
    • 键值对组成对象,键值对是用来描述这个对象特征的,那么这些键值对有些是天生就有的,我们称之为内置属性,有些是人为定义的,我们称之为自定义属性。

    以数字为属性名的时候,只用通过对象名[‘属性名’]的方式操作,是数字的时候可以省略引号

js中数据类型的比较 (==)

两个等号的比较,等号两侧数据类型允许不一致,如果不一致的时候,等号两侧会默认转为同一数据类型再进行比较 - 对象==对象 永远不相等 - 对象==字符串 对象转为字符串,字符串和字符串比较 - 对象==数字 对象转为字符串,字符串转为数字,数字和数字比较 - 对象==布尔 对象转为字符串,字符串转为数字,布尔转为数字,数字和数字比较 - 字符串==数字 字符串转为数字,数字和数字比较 - 字符串==布尔 字符串转为数字,布尔转为数字,数字和数字比较
  []==false;//true,这个是字符串和布尔比较,全部转化成数字。两边都是0.
  ![]==false://teue,这个是布尔和布尔比较,不进行转化,直接比较。两边都是false
  • 布尔==数字 布尔转为数字,数字和数字比较
  • null==undefined true,undefined与null是相等;
  • null===undefined fasle
  • null或undefined与其他数据类型比较都不相等
  • NaN==NaN 永远不相等 ,NaN与任何值都不相等,与自己也不相等。

基本数据类型和引用数据类型的区别

基本数据类型:如果将一个变量的基本数据类型的值赋值给另一个变量,那么原来变量之后的操作,与另一个变量一点关系都没有,因为基本数据类型会直接将值传递给对方,相当于两个变量存的值一致,但是有两份。复制
基本数据类型直接操作值
引用数据类型:

    var obj1={
        name:'zfpx'
    };
    var obj2=obj1;
    obj1.name="iloveyou";
    console.log(obj1,obj2);


  • 浏览器提供一个全局作用域供这段代码从上到下执行;
  • 遇到obj1,发现其是引用数据类型,浏览器会开辟一个内存空间将obj1中的代码块当做字符串,存储在这个内存空间中,给内存空间一个十六进制的地址,将这个地址返回给obj1,此时obj1=内存地址;
  • 当obj2=obj1时,obj1给obj2的其实是obj1中存储的内容地址,那么obj2也会通过这个地址去查找和obj1一样的内存空间;
  • 无论修改obj1还是修改obj2,其实都是操作的一个地址,所以一个改变,另一个也会跟着改变。

引用数据类型操作的是一个内存地址。
D盘中是源文件,将这个源文件增加了几个快捷方式,一个放在桌面上,一个放在C盘中,一个放在E盘中,那么桌面还是c盘还是E盘,其实操作的都是D盘那个原始文件,也就是说文件只有一个,通道有很多

数据类型的检测

  • typeof value 运算符
    • 检测的返回值是一个字符串,引号中间包着该值的数据类型
    • typeof 运算符不能具体检测object下的数据类型
    • typeof 运算符检测null的时候,返回值为”object”
    • typeof 运算符在一个公式中出现两次或以上,最终值都是”string”
    typeof 1;// "number"
    typeof null;//"object"
    typeof [];//"object"
    typeof "abc";//"string"
    typeof undefined;//"undefined"
    typeof true;//"boolean"
    typeof {};//"object"
    typeof function () {};//"function"
    typeof /^%/;//"object"
    typeof NaN;//"number"
  • instanceof 判断已知对象是否属于哪一类
    一个值是否属于这个类的一个实例
 [1,2,3] instanceof Array  // true
  • constructor (构造器)
[1,2,3].constructor === Array  // true
  • Object.prototype.toString.call()
Object.prototype.toString.call([1,2]);//"[object Array]"

判断

条件运算符(三元运算符/三目运算符)

基于某些条件对变量进行赋值的条件运算符

var num=(a>b)?val1:val2;
// a>b 成立  num=val1
// a>b 不成立 num=val2

如果一个条件判断完成,有多个语句需要执行的时候,我们需要将这些语句用逗号隔开,并且放在一个括号内

a>b?(alert("珠峰培训"),console.log("zfpx")):alert("耿大爷");

如果条件成立执行一些语句,如条件不成立就什么也不执行

a>b?alert('123'):void (0);

三元、三目,条件运算符,默认是给变量进行赋值的,还可以判断一个条件是否成立,如果成立执行冒号前的语句,如果不成立执行冒号后的语句

if语句 可以支持js中所有的判断

if 后面的条件,我们在判断的时候,视为一个整体,我们会判断这个整体为真或为假,也就是说if后面的这个()中最终返回值要么是true要么是false

if
if (条件){条件成立时执行的js语句}
if else
if (条件){
    条件成立时执行的js语句
}else{
    条件不成立时执行的js语句
}
if else if else

代码从上到下执行的时候,如果遇到一个条件成立,执行对应的代码,这个成立的条件后面的判断代码就不会再执行了

if (条件1){
    条件1成立时执行的js语句
}else if(条件2){
    条件2成立时执行的js语句
}else{
    以上条件都不成立时执行的代码
}
switch 语句用于基于不同的条件来执行不同的动作
switch (条件){
    case1:
        条件===值1的时候要执行的操作;
        break;
    case2:
        条件===值2的时候要执行的操作;
        break;
    default:
        以上都不成立执行的代码;
}

switch 判断中如果有一个条件成立,这个条件后面如果不添加break的话,那么这个成立条件后面的其他代码,都会执行一遍,加上break是跳出判断的意思,也就是说这个成立条件执行完成之后,其余代码不会再执行了

循环

for

运行环境(什么时候时候使用for循环):for循环适用于已知循环次数
作用:一遍遍执行相同的代码
语法:
for (声明一个变量并且赋值;定义循环的次数;){
要一遍遍执行的代码;
每次执行完成代码后都进行累加,让我的初始值慢慢变大,最后大于定义的循环次数后,结束全部循环
}

for (var i=0;i<4;){
    要一遍遍执行的代码;
    i++;
}
for (var i=0;i<4;i++){
    要一遍遍执行的代码;
}

计算机会将一切复杂运算简单化,所以数据类型比较的时候,同数据类型比较,不会转化为其他数据类型,判断的时候,如果需要布尔值,也不会转为其他数据类型
= 在js中是赋值,如果等号右侧是一个运算的话,会将运算完成的最终结果刚给到等号左侧的变量或者属性

<div style="background-color:red;"></div>
<script>
var box=document.querySelector('div');
var bg=box.style.backgroundColor;
console.log(bg);// "red"
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值