浅谈Java和JavaScript中变量和数据类型的区别

对于一门编程语言的学习,如果第一步是安装环境,那么第二步一定是学习这门语言的基本规则,变量和数据类型则首当其冲
JavaScipt作为一个蹭Java热度而命名的语言,在很多方面和Java也有一定的相似之处
所以在我决定整理复习Java知识的时候,我希望通过一篇对比的文章,来顺便复习一下JavaScipt

当然还有一个理由就是,纯写Java或者纯写JavaScipt的文章,很多人都做过了,再写着实没什么意思 :)

设计区别

  1. Java是一种完全面向对象的编程语言,想要运用Java写东西就必须先设计对象;
    而JavaScript不一样,它是基于对象的一种脚本语言,它为开发者自带提供了很多内部对象,要更为简易省时
  2. Java采用静态联编,Java的对象引用必须在编译时就进行,编译器需要实现强类型检查;
    而JavaScript不同,它采用动态联编,它的对象引用可以在运行时检查
  3. 它们最本质的不同就是用途,Java目前被广泛应用于PC端、手机端、互联网、数据中心等等;
    而JavaScript则被主要用于嵌入文本到HTML页面,读写HTML元素,控制cookies等
  4. 设计区别中的内容参考了这篇博文 —— Java跟JavaScript两者间的关系和区别

关于变量

  1. 不同之处
    • 在Java中,因为其强类型语言的特性,声明变量需要明确该变量的类型,内存管理系统根据变量的类型为变量分配存储空间
    • 在JavaScript中,声明变量不需要指定变量类型,只需使用var关键字;
      不过在ES6的后续计划中,添加了letconst两个关键字用于声明不同作用的变量,但是依旧不需要声明变量类型
    • 而且JavaScipt中的变量可以存储其他类型的变量的值,但是在Java中则有明确的类型要求,不过部分可以通过类型转换来存储其他类型的值
    • 值得一提的是,虽然JavaScript不要求声明变量类型,但是可以通过new关键字来声明其类型
  2. 相同之处
    • 变量是用于存储信息的容器,所以他们都是需要申请内存来存储值,通过变量名可以引用值,也可以修改变量名的值
    • 都是等号右边赋值给等号左边 :)
    • 命名规则基本一致,具体参考下面的文章 Java和JavaScript命名规则
    • ++a代表取++运算之后的值,a++表示取++运算之前的值

<span id="jumpId-NameType"></span>

Java和JavaScript命名规则

  1. 变量命名必须以字母、下划线_或者$为开头,其他字符可以是字母、_$或数字
  2. 变量名中不允许使用空格和其他标点符号,首个字不能为数字,参考第一条
  3. 变量名长度不能超过255个字符注意!!!这是JavaScript的规则,Java参考各个类型的大小范围
  4. 变量名区分大小写,建议驼峰命名法
  5. 变量名必须放在同一行中
  6. 不能使用关键字,分别具体是哪些自行百度
  7. 参考博文

关于数据类型

  1. 不同之处
  2. 相同之处
    • 在Java和JavaScript中都分为基本数据类型和引用数据类型两种

<span id="jumpId-JavaType"></span>

Java数据类型

  1. 基本数据类型
    • 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
  2. 引用数据类型
    • String、对象、数组、类、接口 & .etc
    • 所有引用类型的默认值都是null
    • 一个引用变量可以用来引用任何与之兼容的类型

<span id="jumpId-JsType"></span>

JavaScript数据类型

  1. 基本数据类型
    • 字符串 String,单引号双引号包裹都可以
    • 数字 Number,不分整数和小数,说实话这点写起来比Java爽,但是会有危险 :)
    • 布尔 Booleantrue/false
    • Null,可以将变量值设置为null来清空值
    • 未定义 Undefined,表示变量不含有值
    • Symbol,ES6中添加的新类型
  2. 引用数据类型
    • 对象 Object,由花括号分隔,在括号内部,对象的属性以名称和值对的形式name:value来定义,属性由逗号分隔
    • 数组 Arraynew一个或者直接赋值(隐式创建)
    • 日期 Date,主要是日期时间的一些操作,不过日常工作中习惯用momentjs处理日期和时间
  3. 需要注意的一点
    • JavaScript中的类型是针对值来说,而不是针对变量

<span id="jumpId-JavaTypeChange"></span>

Java中的类型转换规则

  1. 隐式(默认)类型转换
    • 基本类型的默认转换规则 byte/short/char -> int -> long -> float -> double
    • byte/short/char相互之间不能转换,它们参与运算首先将转换成int类型再进行运算
    • 数字和字符串相加,数字会自动装换成字符串
  2. 显示(强制)类型转换
    • 目标类型 变量名 = (目标类型)被转换的类型
    • 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出
    • 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
  3. 有趣的例子
    • 提问: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中的主动类型转换常用方法

  1. 将其他类型值(数字、布尔、日期)转字符串,一把都是用toString()
  2. 字符串转数字,parseInt()转换成整数,parseFloat()转换成浮点数,整数和浮点数都是Number类型
  3. 将布尔转换成数字可以使用方法Number()
  4. 当JavaScript尝试操作一个错误的数据类型时,会自动转换为正确的数据类型
    • 举个例子:5 + null // 返回数字5,null 转换为 0
    • 举个例子:'5' + null // 返回字符串5null,null 转换为 'null'
    • 其他例子就是字符串类型数字和数字类型数字之间的运算都会转成数字运算
  5. 将其他类型值转换成布尔值类型
    • 原始类型值转换方法,这六个类型undefined/null/-0/0/NaN/空字符串全部为false,其他全部为true
    • 所有对象的布尔值都是true,甚至false对应的布尔值对象也是true,空对象空数组也都是true
    • 举个例子:console.log(Boolean(new Boolean(false))) // 输出true
  6. 隐式类型的转换是系统进行运算时自动进行的,但是调用的方法都是显式类型转换的方法
    • 一元运算符+可以隐式的将字符串转为数字,如果变量不能转换成数字,他仍会成为一个数字,但值会是NaN
      举个例子:var a = 5; console.log(c = +a); // 输出数字5
      举个例子:var b = 'abc'; console.log(b = +abc); // 输出NaN
    • - * / %(减号、乘号、除号、取余运算符)运算时会通过Number()把数据转换成Number类型后,再进行运算
    • && || !(与或非运算符)运算时会通过Boolean()把数据转换成Boolean类型后,再进行运算
    • < > <= >= == !=(比较运算符)运算时,当数字和字符串比较大小时,会隐示将字符串转换成Number类型进行比较,
      而当字符串和字符串比较大小时,则比较的是ascii码的大小,最后返回的则是布尔值
    • 注意!!!比较运算符中undefinednull是不会发生类型转换的,只有相等的值会返回true
    • 注意!!! 全局isNaN()函数会将测试值通过Number()转换为数字,然后对其进行测试,
      但是Number.isNaN()不会将值转换为数字,并且不会为任何非数字类型的值返回true
  7. 如果用==来判断两个数值是否相等,由于会发生隐式类型转换,所以是非常存在非常大的漏洞的,
    为了解决这一问题,引入了===(绝对等于)和!==(绝对不等于)
  8. 参考资料一参考资料二

我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~ :)
转发请注明参考文章地址,非常感谢!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容