JS学习小计


title: “JS学习小笔记——数据类型” description: JS学习笔记之数据类型 date: 2025-02-08T21:00:00+08:00 tags: [笔记,计算机] license: “BYNN” cyears: “2025”

数据类型

  • 数据类型的分类
    1. 数值 number,整数和小数
    2. 字符串 string
    3. 布尔值
    4. undefined
    5. null
    6. 对象 object
  • 三种类型
    1. null 和 undefined 是不一样的
    2. {} [] 返回 true
    3. undefined 、null 、flase 、0 、NaN 、""或'' 6个会视作flase
  • 数值
    1. 123 整数 1.23 浮点数 -123 负数 NaN (not a number) Infinity 无限大
      • Infinity的运算规则 Inf 与 null 计算时,null 会转成 0 再计算 EG1
    2. + - * / % 加、减、乘、除、取余
    3. 和数值相关的全局方法
      1. parseInt(字符串)==>输出成整数
        • 如果字符串头部有空格,空格会被去除再转换
        • 如果参数不是字符串会先转换成字符串再转换
        • 转换是一个字符依次转换,遇到不能转换的字符就停止,并返回转好的部分
        • 如果第一个字符就无法转换,返回NaN ,请注意 +1 -1 这种后接数字的部分,这个符号在此处不视作 加 或 减 符号 EG2
        • 请小心科学计数法产生的奇怪数值
      2. parseInt(字符串,第二参数)==>输出第二参数限定的进制数的值,将字符串的值视作第二参数限定进制的数来转换成十进制的整数显示
        • 第二参数限定 2~36 如果超出这个范围,返回 NaN,1也在这个范围之外哦
        • 如果第二参数是 0 、undefined 、null 则直接忽略
        • 如果字符串包含的字符中有对于第二参数限定的进制无意义的字符,则从最高位开始转换直到无意义的位未知,如果最高位就无法转换则返回 NaN
        • 当输入的进制本身是数字而不是字符串时,会有以下问题,数字会被先转换成字符串,也就是无论什么进制会先转换成十进制再转换成字符串,然后再进入parseInt函数参与运算,这会产生有趣的问题 EG3
      3. parseFloat(字符串)==>输出成浮点数
        • 依旧自动过滤最高位前的空格
        • 浮点数转换也是从最高位开始一直转换到不能转换的那位
        • 如果字符串的第一个字符无法转换成字符串 则返回 NaN EG4
        • 此处注意 parseFloat 与 number() 函数的不同 EG5
      4. inNaN(判断值) 可以判断 判断值 是不是 NaN 完全等于返回 true 否则返回 false。原理就是传入任何值先做判断被转成数值,如果不是就返回 NaN,进而完成判断。
        • 字符串、对象、数组(有例外)经过 isNaN() 会显示 true,但是 [] [12345] ['12345'] 空数组、只有一个数值的数组 经过 isNaN() 会返回 false,这三个例外是因为其能被 number() 函数转换为数值
        • Alert 这个地方有一个不明白的地方,为什么要判断某某数值是NaN
      5. isFinite(判断值)===>返回一个布尔值,判断是否是正常数值
        • Infinity 、-Infinity 、NaN 、undefined 、false 会返回false 其他都返回 true

字符串

字符串 就是被 ’ " 单或双引号包围起来的字符,单双引号可在具体情况交替使用

  1. 单个字符串的多行使用,在分行的末尾加``
  2. 多个字符串可以用 + 相连,一定与上面的单个字符串区分开
  3. 一些 反义字符的特殊应用 EG6
  4. 字符串可以被视作字符数组 所以一个字符串可以用数组的方法来操作。计数从 0 开始,若位置编号超过字符串长度或干脆不是数字则会返回 undefined `
  5. 字符串的一些属性
    • length 属性返回字符串的长度 字符串.lengh
  6. Base64 转码方法,只能编码 ASCII ,如果编码中文需要增加 encodeURIComponent() decodeURIComponent() 方法
    • btoa(参数) 编码
    • atob(参数) 解码

对象

对象 被大括号包围的部门就是一个对象的组成,就是(键值对)的组合,一种无序的数据集合

  1. 对象的键名 都是字符串之间用 : 相连
    • 如果键名是数值,会被自动转为字符串,如果键名(第一个是数字、之间有空格、有符号)需要加引号否则报错
    • 对象的键名 又可被称作属性,当其某个属性的键值是一个函数时,则这个属性称作方法,可以像调用函数一样调用
  2. 对象的键值 在键名和冒号之后,可以加引号不加在 ES6 中也可
  3. 对象连串指向后,若第一个对象被指向其他值第二个对象指向不受影响,请注意,这种指向不变只存在于对象,若是其他变量就直接变了指向对象的属性可动态添加 EG7
  4. js对形如 { heel: 123}; 这种一律视作代码块,只有加上括号才视作对象 ({ heel : 123})
  5. 对象的属性读取EG8
    • 对象名.属性名对象名['属性名'] 方括号版本的属性名必须加引号!
    • 如果这个属性名是全数字就可以不用,但是如果有运算符就还要加
    • 如果这个属性名是全数字则必须用[]的方法 不能用 对象名.属性名
  6. 用以上属性的读取方法还可对属性赋值,也就是后绑定
  7. Object.keys(对象名); 返回对象所有属性的数组
  8. delete 对象名.属性名 删除对象的属性,如果成功就返回 true ,删除后再访问被删除的属性 会返回 undefined ,此时 Object.keys(对象名) 返回的属性名也不再包括被删除的属性
    • 删除一个不存在的属性返回什么呢?返回也是 true
    • 删除一个属性不成功才会返回false 所以除非确定这个属性存在否则 delete 返回false才是有意义的
    • delete 只能删除自身属性,无法删除继承属性。而且delete后还返回true
  9. 键名检查 也就是属性名检查 存在返回 true 不存在返回 false in检查 '属性名' in 对象名
    • 同样 in 无法监测对象的属性是否为继承来的,所以需要用 hasOwnProperty 来判断
  10. for (let 变量名 in 对象名 ){ blablabla }; 遍历 对象名 中的所有可被显示出来的属性,无论是否为继承的只能能显示就显示
  11. 如无意外,不要用with (对象) {语句;} 如果在with语句过程中赋值操作,会变成一个当前作用域的全局变量EG9

函数

函数是一种被抽象得加工公式

  • 函数的三种声明方式EG10 1.

EG1

0*Infinity // Nan
0/Infinity //0
Infinity/0 //Infinity
Inf+Inf Inf*Inf //Infinity
Inf-Inf Inf/Inf //NaN

EG2

parseInt(a);

a='.3' //NaN
a='' //NaN
a='+' //NaN
a='[]' //NaN
a='{}' //NaN
a='+155'; // 155

EG3

parseInt(0x11,2); //0x11先被转换成十进制的17,然后再字符串化
//再通过第二参数的二进制转换,结果是 1

EG4

parseFloat(a);
a='[]' //NaN
a='{}' //NaN
a='Ffk' //NaN

EG5

parseFloat(true)  // NaN
Number(true) // 1
parseFloat(null) // NaN
Number(null) // 0
parseFloat('') // NaN
Number('') // 0
parseFloat('123.45#') // 123.45
Number('123.45#') // NaN

EG6

\0 nullu0000 
\b 后退键u0008 
\f 换页符u000C 
\n 换行符u000A 
\r 回车键u000D 
\t 制表符u0009 
\v 垂直制表符u000B 
`\'` 单引号u0027 
`\"` 双引号u0022 
\\ 反斜杠u005C 

EG7

	let a = {};
	let b = a;

a=1; b // {}
---
	a.x=1; b.x // 1
	b.y=2; a.y // 2

	

EG8

	let a ={
		0.5: 'chart',
		'0.75+12': 'Good'
	}
	a[0.5] // chart
	a[0.75+12] //error

EG9

with (对象) {
  语句;
}

let a={
	x:11,
	y:22
};
with(a){
	x:33,
	y:44
}

with 

EG10

function 函数名(参数){
	blablabla
}

// 定义了一个 函数名 的函数,使用 `函数名()`