JS 数据之间的转换;引用数据类型

数据之间的转换

转字符串

数值类型有toString() 方法,可以把number类型之间转字符串(null和undefined类型没有toString())

// 1. 数值类型的toString()
    var num = 10
    var num1 = num.toString();
    console.log(typeof num,typeof num1)
// 2. 直接 + "",其他数据类型加字符串类型,就隐式转换(自动转换)为字符串
    var num2 = num + ""
    console.log(typeof num2, num2)
    var num3 = null + ""
    console.log(typeof num3, num3)
    var num4 = undefined + ""
    console.log(typeof num4, num4)
//3. String() 把任意数据类型转为字符串
    var a1 = String(10)
    console.log(typeof a1, a1)
    var a2 = String(null)
    console.log(typeof a2, a2)
    var a3 = String(undefined)
    console.log(typeof a3, a3)
    var a4 = String(true)
    console.log(typeof a4, a4)

转数字类型

//1. + 数值运算符号把其他类型转数字类型,不能转数字类型的则是NaN
    a1 = +"1"
    a2 = +"a"
    a3 = +true // true 转为数字1
    a4 = +false // false 转为0
    a5 = +null // 转为0
    a6 = +undefined // 转为NaN
    console.log(typeof a5, a5)
//2. Number() 该方法可以把其他任意数据类型转为number类型,true--1,false--0,null--0,undefined--
NaN
    a7 = Number(undefined)
    console.log(typeof a7,a7)
//3. parseInt() 把数字转为整数,有小数会去掉小数,不能转为数字的都是转为(包括
boolean,null,undefined)NaN
    a8 = parseInt(null)
    console.log(typeof a8,a8)
//4. parseFloat() 将有小数的字符串转为保留小数的数字类型。不能转为数字的都是转为(包括
boolean,null,undefined)NaN
    a8 = parseFloat("4.5555666")
    console.log(typeof a8,a8)
//5. *乘法, / 除法,-减法或自动转为number计算,如果不能转为number计算结果就是NaN
    a9 = 10 * "4"
    console.log(a9)

转boolean类型

a1 = Boolean(1) // 非0的数字转为true
a2 = Boolean(0) // 0会转为false
a3 = Boolean("a") // 非空字符串转为true
a4 = Boolean("") // 空字符串转为false
a5 = Boolean(null) // 转为false
a6 = Boolean(undefined) // 转为false
console.log(a6)
// 在if条件语句里面,其他数据类型会自动转为boolean类型,同Boolean()一致。
if(0){
console.log("ok")
}

引用数据类型

js的数据类型可以分为三大类:

        1. 原始数据类型: 数值类型number,字符串类型string,boolean类型,存放在栈内存

        2. 特殊数据类型: null,undefined,存放在栈内存

        3. 引用数据类型: 对象数据类型object,array 数组,function 函数。存放在堆内存里面

 

// 对于引用数据类型,直接赋值是一种浅拷贝,只拷贝了内存地址。堆内存的数据变化以后,其他引用该内存地址的数据也
会发生变化。
var p2 = p1;
console.log(p1 === p2) // 应用数据类型比较的是内存地址。
console.log(p1 === { // 创建一个引用数据类型则会自动在堆内存里面创建内存空间存储
name: "p1",
age: 12
})
//p2修改name只是修改了对应对象的属性name,并没有修改内存地址,所以p1和p2还是指向的同一个内存地址。
p2.name = "p2"
console.log(p1 === p2);
// 由于p2浅拷贝了p1的内存地址,p2值变化的时候,p1对于的对象也会跟着变化。
console.log(p1)
// 如果不想要浅拷贝(拷贝内存地址)。创建一个新的内存地址,然后拷贝对象的属性和值(深拷贝)
var p3 = {} // 在堆内存里面开辟新的内存地址存放对象
for(var a in p1){ // 变量p1的属性
//把p1的属性和属性值赋值给p3
p3[a] = p1[a]
}
console.log(p3 === p1)
p3.name = "p3"
console.log(p1)

对象数据类型 object

一种数据结构,由属性和方法构成 , 一类属性和方法的集合 ( 一类数据的集合,可以表示很多数据 ) 。用 {} 创建一个对象,对象由很多的属性和属性值组成( 也叫可以 key:value 的结构 ),key 也叫对象的键。也叫键值对 , 键值对之间用 ,( 逗号分割)
{
(key): ( 任意数据类型 ),
(key): (value),
....
}
  • 创建对象
    // 用{} 创建一个对象,对象由很多的属性和属性值组成。
    // 比如描述人的信息,只能用对象描述
    // 对象的键(key)是字符串类型,一般省略了双引号,对象会自动把键转为字符串类型
    var per = {
    name: "张三",
    age: 14,
    "addr": "xxx号"
    }
    console.log(typeof per)
  • 读取对象
    // 读取对象 对象变量.键 读取指定的值
    console.log(per.name) // 读取per对象的name属性对应的值
    console.log(per.age)
    // 读取对象 对象变量[键] 读取指定的值,[]里面可以是字符串或者变量
    console.log(per["name"]) // []里面的字符串需要加""
    var key = "name"
    console.log(per[key]) // []里面可以给变量
  • 修改对象的值
    per.name = "李四"
    per["age"] = 55
  • 删除对象
    delete per.addr
    delete per["name"]
  • 对象的属性值可以是任意数据类型,所以对象数据可以嵌套对象数据等
    var animal={
    name: "猫",
    age: 2,
    peo: {
    name: "张三",
    age: 30
    }
    }
  • with 语句可以操作对象的多个属性
    提供一些便捷性,性能没有直接用 . 属性修改好,存在一定的安全隐患 ( 实际项目中少用 )
    with(peo){
    name='li' // 修改peo对象的name属性
    age=11
    }
  • key in object 可以查看对象是否存在某个属性
    存在返回 true, 不存在返回 false
    console.log("name1" in peo )
  • 遍历对象的属性 for..in
    for(var x in object) 可以遍历对象的所有属性
for(var item in peo){
// item是属性,peo[item] 属性值
console.log(item,peo[item])
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中提到了关于对象转换为数字的过程,对象转换为数字会经历对象->字符串->数字的过程。在这个过程中,会调用对象的toString()方法来将对象转换为字符串。所以在题目中的代码中,对象a通过重写toString()方法,使得每次调用a.toString()都会返回递增的数字。这样,在if语句中,a会被转换为数字进行比较。 引用\[2\]中提到了==的转换规则。对于==运算符,会先判断两边的类型是否相同,如果相同则比较值的大小。如果类型不同,则会进行类型转换转换规则包括将String类型转换为Number类型,将Boolean类型转换为Number类型,将Object类型转换为原始类型后再进行比较等。 综上所述,题目中的代码涉及了对象转换为数字和==运算符的类型转换规则。这是JavaScript数据类型转换的一种练习题。 #### 引用[.reference_title] - *1* *3* [JS几种数据类型转换(内含练习题)](https://blog.csdn.net/BoZai_ya/article/details/117717329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [js中的类型转换,面试必考](https://blog.csdn.net/weixin_39838846/article/details/124136250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值