前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript秘密笔记 第二集

JavaScript秘密笔记 第二集

原创
作者头像
李才哥
修改2020-08-17 10:21:30
1.3K0
修改2020-08-17 10:21:30
举报
文章被收录于专栏:李才哥

1. *数据类型:

string boolean undefined null

2. **数据类型转换

3. **运算符和表达式

1. *数据类型:

string:

什么是: 专门保存一串文字的数据类型

何时: 如果一串文字只用于给人看,就要保存为字符串

比如: 姓名, 手机号, QQ号, 电子邮件, 网址...

如何: 程序中凡是包裹在一对儿引号中的字符,默认就是字符串类型

存储空间:

js中采用unicode编码保存每个字符:

unicode编码: 人为对全球主要语言中每个文字编一个号

为什么: 计算机只认数字(二进制),不认字符

比如: 张 24352 -> 二进制

所占内存空间: 数字"0"~"9" 48~57 1字节

字母"A"~"Z" 65~90 1字节

"a"~"z" 97~122 1字节

英文标点: 1字节

汉字"\u4e00"~"\u9fa5" 2字节

"Hello张东" 9字节

100000000 4字节

"100000000" 9字节

boolean:

什么是: 专门保存判断结果的类型

何时: 只要保存一个条件判断的结果,就用boolean

如何: 只有两个值: true false

强调: 不要加引号!

undefined 和 null

undefined 专门由程序自动给变量赋初值

表示一个变量仅声明,暂未赋值

null 专门让程序员手动清空一个变量之用

2. **数据类型转换:

什么是: 将数据本身的类型,转化为你需要的另一种数据类型

何时: 只要给定的数据类型和运算要求的数据类型不相符,都要先转化数据类型,再执行运算

***js语言是弱类型语言: 3大特点:

1. 声明变量时,无须提前指定变量的数据类型

2. 一个变量,先后可保存不同类型的数据

3. js程序会根据自身的需要,隐式转换数据的类型

包括: 2种情况:

1. 隐式转换: 无须程序员干预,程序自动完成的数据类型转换

何时: 只要给定的数据类型,不符合正在执行的js程序的要求,程序都会先转换为想要的数据类型,再执行程序。

比如: 仅以算数运算为例:

默认: 都转为number , 其中: bool: true->1 false->0

特殊: +运算中,只要碰到字符串,就都转为字符串,且加法计算变成字符串拼接!

2. 强制转换: 由程序员主动调用功能,实现的数据类型转换

何时: 只要隐式转换的结果还不是想要的!

包括:

转number: 2种:

凡是页面上获得的字符串,都要先转为数字,再执行算数计算.

1. 转换纯数字组成的字符串和bool为number

Number(x) 返回一个number

如果转不了, 返回NaN

NaN: Not a Number 代表一切不是数字的值

将来,只要获得NaN,说明无法转换

其实Number(x)很少主动使用,几乎都是隐式自动调用

2. 将带单位的字符串,去单位后,再转数字:

parseFloat(str) 保留小数部分 ——首选

parseInt(str) 去掉小数部分——除非确定去掉小数部分时

强调: Number(x),什么都可接收

parseFloat/Int(str), 默认接收字符串

比如: Number(true) -> 1

parseFloat(true) -> NaN

parseFloat("true")

转string:

x.toString() 不能转null和undefined

String(x) 万能! ——首选

其实,隐式转字符串,都是自动调用String

专门的用途:

一般查看一个变量/数据结构的内容时,才转字符串

——拍照

转 boolean: 几乎不会主动使用!

Boolean(x)

***规则: 只有5个值: "" 0 NaN null undefined 转为false,

其余都转为true!

3. **运算符和表达式:

什么是程序: 人的想法在计算机中的执行

什么是运算符: 程序中模拟人的想法的特殊符号

什么是表达式: 由运算符,数据和变量组成的完成一项任务的一条程序语句。

所有表达式默认从左向右,两两执行

算数运算: + - * / %

%: 模运算/取余数/取零头

m%n =? m/n 不取商,取除不尽的余数部分:

12345%100=45

20000%100=0

8%3=2

何时使用: 1. 取余数/取零头

2. 判断整除/奇偶数/闰年

8%2=0 8是偶数

7%2=1 7是奇数

隐式转换:

默认: 都转number,再算数计算

特殊: +运算中,只要碰到字符串,就都转字符串,+运算变为字符串拼接

舍入误差: 计算机中也有计算不尽的数值

不可避免!

近似解决: 按指定小数位数四舍五入!

如何: n.toFixed(d) 将n按d位小数四舍五入

比如: n.toFixed(2) 将n按2位小数四舍五入

今后,凡是给客户显示的钱数,都要按2位小数四舍五入

如果算数计算中,任意一个值为NaN,则计算结果,也是NaN

关系运算: 做比较,做判断

返回值: bool类型的true/false

包括: > < >= <= == !=

隐式转换:

默认: 都转为number类型

特殊:

1. 两个字符串: 不再转数字,而是按位比较每个字符的unicode号, 直到比出大小为止.

2. null和undefined 无法用==判断

因为在底层,null和undefined是相等的.

解决: 用===全等 代替 ==

=== 不带隐式转换的==比较:

要求: 必须类型先相同,且值相等

请用户输入: var input=prompt("输入提示");

扩大: 只要希望两值不但值相等,且类型也必须相同时

就可用===代替==

3. NaN也不能用==判断:

NaN不大于,不小于,不等于任何值

解决: isNaN(num) 专门代替==,用于判断给定的值是不是NaN

反用: !isNaN(num) 专门判断num是不是数字!

不是NaN -> 就必然是数字!

强调: ***今后凡是从页面上获得数据,都是字符串类型!

逻辑运算: 将多个关系运算综合起来,得出最终的结论

返回值: bool类型: true/false

包括: 3种:

&&: 而且

条件1&&条件2: 必须同时满足条件1和条件2,才返回true,只要有一个条件为false,则结论为false

||: 或者/要么

条件1||条件2: 只要满足任意一个条件,就返回true。

除非所有条件都不满足,才返回false

!: 不

!条件: 颠倒条件的结论

隐式转换:

默认将每个条件都转为bool类型,再综合判断

Boolean(条件1)&&Boolean(条件2)

Boolean(条件1)||Boolean(条件2)

! Boolean(条件)

短路逻辑: 如果前一个条件已经可以得出最终结论

则后续条件不再执行:

&&: 如果前一个条件为true, 则后一个条件继续执行

如果前一个条件为false, 则后一个条件不再执行

||: 如果前一个条件为true, 则后一个条件不再执行

如果前一个条件为false, 则后一个条件继续执行

利用短路:

1. 利用&&的短路: 简单分支结构: 1个条件1件事,满足才执行,不满足就不执行!

条件&&(操作): 只有条件满足,才执行操作,否则不执行 操作

2. 利用||的短路: 默认值/备选值:

值1||值2: 如果值1有效(不是0,"",NaN,null,undefined)

就首先选择值1使用

如果值1无效,就选择备用值2使用

赋值运算: =

可简化: 扩展赋值运算:

何时: 只要先取出变量的值修改,之后再存回变量中

比如: total=total*0.8

如何: a=a+b 可简写为 a+=b

a=a-b 可简写为 a-=b

a=a*b 可简写为 a*=b

a=a/b 可简写为 a/=b

a=a%b 可简写为 a%=b

更简化: 如果每次只是+1或-1

a+=1 可简写为 a++

a-=1 可简写为 a--

仅以++为例: 其实++可写前,也可写后:

++a vs a++

相同: a的值一定都被+1

不同: ++a 返回+1后的*新*值

a++ 返回+1前的*旧*值

位运算: 了解

1. 左移和右移:

左移: m<<n 等效于 m* 2的n次方

m>>n 等效于 m/ 2的n次方

比如: 1<<3=8 2<<2=8

16>>2=4

2. 取整: 鄙视

m^0 m|0 m>>>0 用于简化parseInt(m)

3. 不声明第三个变量,交换两个变量中的值: 鄙视

a^=b; b^=a; a^=b;

作业:

var n=3;

//console.log(n++ + ++n + n++);//?

//所有表达式,默认都是从左向右依次执行!

//先执行的表达式,会影响后续表达式中的变量

console.log(++n + n++ + ++n);//?

console.log(n);//6

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档