GitHub

Java和JS的那些不同

  记得刚学JavaScript时,就听见有人说JavaScript和Java之间的关系就像是:巴基斯坦和卡巴斯基、面包和面包车,可以说两者除了语言名字上有点像以外,几乎毫无关系。其实为啥JavaScript叫这个名字,Nicholas C.Zakas大神在《JavaScript高级程序设计》的开篇中就有提到,起初JavaScript叫LiveScript,不过九几年那时候Java正火,为了赶波顺风车,于是LiveScript更名为JavaScript。

 

1. JavaScript是动态语言,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。JS是解释型语言,即在程序运行时把语言翻译成机器语言。

   Java就是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。Java是编译型语言,即在程序运行前把语言翻译成机器语言。

 

2. JS中,单双引号没有区别,它们都用来表示字符串。

   Java中,字符型(char)的值用单引号括起来,表示单个字符 char c = 'a';

   字符串(String)的值用双引号括起来,表示一个或多个字符 String s = "abc"; 

String s = 'hello'; //Java报错

 

3. JS中,正则表达式用 / / 包起来   

var str = "abc123"
str = str.replace(/\d{3}/, ""); //注意replace方法不会对字符串本身做出改变

   Java中,正则表达式用 " " 包起来      

String str = “abc123”;
str = str.replaceAll("(.{2})(.{*})(.{2})", "$1***$3"); //注意replaceAll方法也不会改原字符串
//Java替换字符串有两个常用的方法,replace()和replaceAll()
//replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换
//replaceAll的参数是regex,即基于规则表达式的替换

 

4. JS中有变量提升

   Java中没有变量提升,但函数有提升。在public static void main 中,可以使用在其后声明的函数块,不可以使用在其后声明的变量

 

5. JS中的this不限制使用范围,使用时注意this的指向即可。JS中函数里的this指向的是window,生成实例后指向实例化后的对象。需要注意的是在ES6的箭头函数中不可以改变this绑定

function Student(name){
    this.name = name;
}
Student("kuro-p"); //直接调用,则创建全局变量name;如果已存在全局变量name,则更改全局变量name的值
var Tom  = new Student("Tom"); //构造函数调用,创建对象属性name
console.log(Tom.name); //Tom

   Java的入口函数public static void main中,不能调用this,this只能用在构造函数或方法里

   在构造方法里的this指向当前对象

class Student(){
    String name="";
    public student (String name){
        this.name  = name; //这个this.name指的是class student里的变量name,需要在class中提前声明才能使用
    }
}

 

5. 返回值问题

  不管是JS还是Java都要注意方法的返回值是什么,拿Java举例来说,ArrayList.add()方法的返回值是布尔值,BigDecimal.add()方法并没有更改原数据。

 

6. 关于花括号"{ }"

  在JS中,花括号可用来初始化一个对象,一种用键值对保存数据的数据类型

var person = {
    name: "Kuro-P",
    age: 23
}

  在Java中,花括号中的代码是这个类在实例化之前所做的一些操作,可以看作是构造方法前的初始化方法

String[] fruits = { "apple", "pear", "banana" };

 

7. 循环

  JS 和 Java 都可以用最基本的for循环来实现循环语句  

for(var i=0: i<list.length; i++){...} //JS
for(int i=0: i<list.length; i++){...} //Java

  对于普通的数组循环,二者都提供了更为便利的方法

  JS可用 for..of...(注意兼容)

for(item in list){...}

  Java用 for.. : ..

for(item : list){...}

 

8. 数组长度

  在JS中,字符串和数组长度都可以用length属性获取

var name = 'Kuro-P';
console.log(name.length); // 6
var arr = ['K', 'u', 'r', 'o', '-', 'P'];
console.log(arr.length); //6

  在Java中,有长度访问三种方式分别对应三种情况 (详情)

  • 访问数组长度时,用 length 属性
  • 访问String长度时,用 length() 方法
  • 访问List等泛型集合长度时,用 size() 方法
public static void main(String[] args) {
        String []list={"lHTML","CSS","JS"};
        String name="Kuro-P";

        List<Object> array=new ArrayList();
        array.add(name);

        System.out.println(list.length); //3
        System.out.println(name.length()); //6
        System.out.println(array.size()); //1
    }

 

9. 数据类型转换

  JS中的基本数据类型中常需要操作的就是String和number

var number = 123;// number转换成String
number.toString(); // "123"

// String转换称number
// 若用 parseInt() 转换成含有非数字的字符串时,非数字部分要在数字部分的后面
parseInt("15px") // 15 
parseInt("px15") // NaN

// 浮点数取整
parseInt(123.456) //123
parseInt(123.678) //123

// 浮点数取整也可以用Math里的方法

  Java中的强制类型转换,就要用到其包装类的方法

// String 转 Integer
Integer.parseInt( str )
// 或者 (int) 123 这样声明

// 强制转换为Double同理
Double.parseDouble()

 

10. 日期类型的转换

  JS中 Data to String 或者 String to Date 如下

var startDate = new Date(),
   endDate = new Date(startDate + 24 * 60 * 60 * 1000 * 31); //对时间进行加减操作 +31 天 startDate.toLocalDateString();
//"2018/7/23" 高版本的Chrome和Safari 表现一致,但鉴于有不同版本浏览器表现不一致的情况,谨慎使用 startDate.getFullYear(); //2018 startDate.getMonth() + 1; //7 startDate.getDate(); //23 //同时也可以set时间 startDate.setFullYear(2017); startDate.setMonth(6); startDate.setDate(28);

  Java中常用的对Date操作的方法如下

//1. 对Date对象进行加减时间操作( 用calendar类 )
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

calendar.add(Calendar.YEAR, -1); // 对时间进行处理
calendar.add(Calendar.MONTH, -1);
Date oldDate = calendar.getTime(); //return Date

//2. 将字符串转化为Date( 用SimpleDateFormat类 )
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd"); //大小写含义不同,不可随意使用
String today = "2018/7/23";

try{
    Date todayDate = simpleDateFormat.parse(today); 
} catch (ParseException e) {
    System.out.println(e);
}

   java关于日期参数的参考:SimpleDateFormat使用详解

 

 

posted @ 2018-03-13 15:48  長风  阅读(292)  评论(0编辑  收藏  举报