专栏首页李才哥JavaScript秘密笔记 第二集
原创

JavaScript秘密笔记 第二集

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 趣图:会 JS 了不起啊!

    简单大概的说出来就可以了,不要详细到你哪年进入公司,哪年离开公司,负责项目做什么的,说一大通。这个对我们面试官来说,想让你自我简单介绍,其实考察点有两方面:

    李才哥
  • 前端面试系列(4)

    第二步:true < 1,这时true会转为1,false会转为0进行比较,因此这一步结果为false

    李才哥
  • 开课吧web全栈架构师第九期

    李才哥
  • Under the Hood: NaN of JS

    如果你还不确定这两题的答案的话,请仔细阅读本文。 这两题的答案不会直接解释,请从文章中寻找答案。

    有赞coder
  • AkShare-能源数据-碳排放-国际行情

    目标地址: http://www.cerx.cn/dailynewsOuter/index.htm

    AkShare
  • 【机器学习实战】第13章 利用 PCA 来简化数据

    第13章 利用 PCA 来简化数据 ? 降维技术 场景 我们正通过电视观看体育比赛,在电视的显示器上有一个球。 显示器大概包含了100万像素点,而球则可能...

    片刻
  • ES2016

    一个数组包含性检测方法,一个幂运算符。没了,ES2016就这两个新特性,还都是锦上添花的东西

    ayqy贾杰
  • AkShare-期货数据-仓单日报

    目标地址: http://www.czce.com.cn/cn/jysj/cdrb/H770310index_1.htm

    AkShare
  • JavaScript 中的 NaN

    另外还有 2 个特殊的数字值:Infinity(比其他任何数字都大的数字)和 NaN(表示“Not A Number”概念):

    疯狂的技术宅

扫码关注云+社区

领取腾讯云代金券