共计 4060 个字符,预计需要花费 11 分钟才能阅读完成。
对于一门编程语言的学习,如果第一步是装置环境,那么第二步肯定是学习这门语言的根本规定,变量和数据类型则首当其冲
JavaScipt 作为一个蹭 Java 热度而命名的语言,在很多方面和 Java 也有肯定的相似之处
所以在我决定整顿温习 Java 常识的时候,我心愿通过一篇比照的文章,来顺便温习一下 JavaScipt
当然还有一个理由就是,纯写 Java 或者纯写 JavaScipt 的文章,很多人都做过了,再写着实没什么意思 :)
设计区别
- Java 是一种齐全面向对象的编程语言,想要使用 Java 写货色就必须先设计对象;
而 JavaScript 不一样,它是基于对象的一种脚本语言,它为开发者自带提供了很多外部对象,要更为繁难省时 - Java 采纳动态联编,Java 的对象援用必须在编译时就进行,编译器须要实现强类型查看;
而 JavaScript 不同,它采纳动静联编,它的对象援用能够在运行时查看 - 它们最实质的不同就是用处,Java 目前被广泛应用于 PC 端、手机端、互联网、数据中心等等;
而 JavaScript 则被次要用于嵌入文本到 HTML 页面,读写 HTML 元素,管制 cookies 等 - 设计区别中的内容参考了这篇博文 —— Java 跟 JavaScript 两者间的关系和区别
对于变量
不同之处
- 在 Java 中,因为其强类型语言的个性,申明变量须要明确该变量的类型,内存管理系统依据变量的类型为变量调配存储空间
- 在 JavaScript 中,申明变量不须要指定变量类型,只需应用
var
关键字;
不过在 ES6 的后续打算中,增加了let
和const
两个关键字用于申明不同作用的变量,然而仍旧不须要申明变量类型 - 而且 JavaScipt 中的变量能够存储其余类型的变量的值,然而在 Java 中则有明确的类型要求,不过局部能够通过类型转换来存储其余类型的值
- 值得一提的是,尽管 JavaScript 不要求申明变量类型,然而能够通过
new
关键字来申明其类型
相同之处
- 变量是用于存储信息的 容器,所以他们都是须要申请内存来存储值,通过变量名能够援用值,也能够批改变量名的值
- 都是等号左边赋值给等号右边 :)
- 命名规定基本一致,具体参考上面的文章 Java 和 JavaScript 命名规定
++a
代表取++
运算之后的值,a++
示意取++
运算之前的值
<span id=”jumpId-NameType”></span>
Java 和 JavaScript 命名规定
- 变量命名必须以字母、下划线
_
或者$
为结尾,其余字符能够是字母、_
、$
或数字 - 变量名中不容许应用空格和其余标点符号,首个字不能为数字,参考第一条
- 变量名长度不能超过 255 个字符 留神!!! 这是 JavaScript 的规定,Java 参考各个类型的大小范畴
- 变量名辨别大小写,倡议驼峰命名法
- 变量名必须放在同一行中
- 不能应用关键字,别离具体是哪些自行百度
参考博文
- 命名规定中的内容参考了这篇博文 —— js 变量命名规定
- 命名规定中的内容参考了这篇博文 —— Java 变量命名规定
对于数据类型
不同之处
- 提供的数据类型不同,具体能够参考上面 Java 数据类型 & JavaScript 数据类型 两篇文章
- 类型转换并不相同,具体能够参考上面 Java 中的类型转换规定 & JavaScript 中的类型转换规定 两篇文章
相同之处
- 在 Java 和 JavaScript 中都分为根本数据类型和援用数据类型两种
<span id=”jumpId-JavaType”></span>
Java 数据类型
根本数据类型
- 8 种根本类型,留神!!!上面括号是默认值
- 6 种数字类型,其中 4 个整数型
byte
(0b)&short
(0s)&int
(0)&long
(0L),2 个浮点型float
(0.0f)&double
(0.0d) - 1 种字符类型
char
(无默认值,大小范畴是\u0000
–\uffff
,等效十进制0
~65535
),
对于char
值须要提一句的是,字符 A
的十进制值是 65,字符 a
的十进制值是 97,后续字母顺次每个加一,
有个概念叫ascii 码
有趣味的能够深刻理解下 - 1 种布尔类型
boolean
(false) - 留神!!!数字类型的结尾字母不须要思考大小写,都能够
- 在计算机中正数由补码进行示意,
补码 = 源码取反 + 1
,举个例子:22,在计算机中的示意为:00010110;-22,取反:11101001,加 1:11101010
援用数据类型
- String、对象、数组、类、接口 & .etc
- 所有援用类型的默认值都是
null
- 一个援用变量能够用来援用任何与之兼容的类型
<span id=”jumpId-JsType”></span>
JavaScript 数据类型
根本数据类型
- 字符串
String
,单引号双引号包裹都能够 - 数字
Number
,不分整数和小数,说实话这点写起来比 Java 爽,然而会有危险 :) - 布尔
Boolean
,true
/false
- 空
Null
,能够将变量值设置为null
来清空值 - 未定义
Undefined
,示意变量不含有值 Symbol
,ES6 中增加的新类型
- 字符串
援用数据类型
- 对象
Object
,由花括号分隔,在括号外部,对象的属性以名称和值对的模式name:value
来定义,属性由逗号分隔 - 数组
Array
,new
一个或者间接赋值(隐式创立) - 日期
Date
,次要是日期工夫的一些操作,不过日常工作中习惯用momentjs
解决日期和工夫
- 对象
须要留神的一点
- JavaScript 中的类型是针对值来说,而不是针对变量
<span id=”jumpId-JavaTypeChange”></span>
Java 中的类型转换规定
隐式(默认)类型转换
- 根本类型的默认转换规则
byte/short/char -> int -> long -> float -> double
- 当
byte/short/char
相互之间不能转换,它们参加运算首先将转换成int
类型再进行运算 - 数字和字符串相加,数字会主动装换成字符串
- 根本类型的默认转换规则
显示(强制)类型转换
指标类型 变量名 = (指标类型)被转换的类型
- 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度升高或溢出
- 有多种类型的数据混合运算时,零碎首先主动的将所有数据转换成容量最大的那一种数据类型,而后再进行计算
乏味的例子
- 发问:Java 是如何解决强制类型转换的溢出解决呢?
byte a = (byte)130
- 答:在计算机中,所有的数据都是存储的补码模式,那么 130 首先被当成 int 型存储,四个字节 32 位,
它的补码如下:0000 0000 0000 0000 0000 0000 1000 0010
,转换为 byte 类型,进行截取,
高字节局部去除,保留低字节局部,失去转换为 byte 类型的补码为:1000 0010
,
咱们将其转换为源码:补码(1000 0010)-> 反码(1000 0001)-> 原码(1111 1110)为 -126,所以最初的答案是 -126 - 参考资料
<span id=”jumpId-JsTypeChange”></span>
JavaScript 中的类型转换规定
JavaScript 是弱类型语言,变量类型齐全由以后值决定,这种类型就叫弱类型。
首先要记住的是,JavaScript 中的类型转化,它失去的后果永远是根本类型,也就能够分为两种状况,
根本类型和根本类型之间的转化,援用类型转化为根本类型,不可能呈现根本类型转化为援用类型,
类型转化呈现最多就是转化成Number
, String
, 和Boolean
Java 中的被动类型转换罕用办法
这里感觉能够另外写一个专题博文,前期再补档,到时候再补个链接过去,有趣味的同学能够先浏览这篇文章
JavaScript 中的被动类型转换罕用办法
- 将其余类型值(数字、布尔、日期)转字符串,一把都是用
toString()
- 字符串转数字,
parseInt()
转换成整数,parseFloat()
转换成浮点数,整数和浮点数都是Number
类型 - 将布尔转换成数字能够应用办法
Number()
当 JavaScript 尝试操作一个 谬误 的数据类型时,会主动转换为 正确 的数据类型
- 举个例子:
5 + null // 返回数字 5,null 转换为 0
- 举个例子:
'5' + null // 返回字符串 5null,null 转换为 'null'
- 其余例子就是字符串类型数字和数字类型数字之间的运算都会转成数字运算
- 举个例子:
将其余类型值转换成布尔值类型
- 原始类型值转换方法,这六个类型
undefined/null/-0/0/NaN/ 空字符串
全副为false
,其余全副为true
- 所有对象的布尔值都是
true
,甚至false
对应的布尔值对象也是true
,空对象空数组也都是true
- 举个例子:
console.log(Boolean(new Boolean(false))) // 输入 true
- 原始类型值转换方法,这六个类型
隐式类型的转换是零碎进行运算时主动进行的,然而调用的办法都是显式类型转换的办法
- 一元运算符
+
能够隐式的将字符串转为数字,如果变量不能转换成数字,他仍会成为一个数字,但值会是NaN
,
举个例子:var a = 5; console.log(c = +a); // 输入数字 5
,
举个例子:var b = 'abc'; console.log(b = +abc); // 输入 NaN
- * / %
(减号、乘号、除号、取余运算符)运算时会通过Number()
把数据转换成Number
类型后,再进行运算&& || !
(与或非运算符)运算时会通过Boolean()
把数据转换成Boolean
类型后,再进行运算< > <= >= == !=
(比拟运算符)运算时,当数字和字符串比拟大小时,会隐示将字符串转换成Number
类型进行比拟,
而当字符串和字符串比拟大小时,则比拟的是ascii 码
的大小,最初返回的则是布尔值- 留神!!!比拟运算符中
undefined
和null
是不会产生类型转换的,只有相等的值会返回true
- 留神!!! 全局
isNaN()
函数会将测试值通过Number()
转换为数字,而后对其进行测试,
然而Number.isNaN()
不会将值转换为数字,并且不会为任何非数字类型的值返回true
- 一元运算符
- 如果用
==
来判断两个数值是否相等,因为会产生隐式类型转换,所以是十分存在十分大的破绽的,
为了解决这一问题,引入了===
(相对等于)和!==
(相对不等于) - 参考资料一、参考资料二