此文先从语法角度讲述,会持续总结更新,先开个篇再说,有想法的同学也可以在下面留言。

 

js和java属于两门语言。参考了java语言,“看上去与Java足够相似,但是比Java简单”,是简化版Java语言。特别是在定义对象变量的时候,省略的太极端了。java里有的很多常用类型的对象在js中是没有的。js由原网景(Netscape)公司的高级工程师布兰登·艾奇(Brendan Eich)(曾经的 Mozilla公司的十天CEO)研发。

 

1.equals()方法

js中比较字符串相等不能用equals(没有equals,你也可以自己写个插件类的工具脚本),而用双等于==

而java有equals()方法。

 

2.集合类

js中没有Set、Map和List(但有数组Array()),需要自己利用Array写实现方法。

(js中的Array()请参考:http://www.w3school.com.cn/js/js_obj_array.asp

稍后会持续总结出类似于java中的Set、Map、List等等对象工具类js供大家下载参阅

Map.js:    http://download.csdn.net/download/superit401/10048291

List.js      http://download.csdn.net/download/superit401/10048302

Set.js      http://download.csdn.net/download/superit401/10048305

 

3.js和java中的length,length()对比:

js中只有length(在字符串长度、数组)没有length(),java中数组用length,字符串用length().

请参考:http://blog.csdn.net/superit401/article/details/78408500

4.js和java中的size,size()对比

Java和js中没有size,但是java中集合用size(),js的轻量级jquery框架获取元素个数用size().

 

5.判断是否有指定字符串

java中的String有contains()方法,但js中没有,可用indexOf()!=或==-1代替。

6.JS的逻辑运算符&& 、 ||和位运算符 & 、 | 的区别:与java不同的是在进行逻辑运算时,&&和& 、|| 和 | 只有点小区别。

 

性能上的比较

逻辑运算符&& || 中,如果&&的第一个运算数是false,就不再考虑第二个运算数,直接返回false;如果||的第一个运算数是true,也不再考虑第二个运算数,直接返回true。而&和|运算符却不是这样的,它们总是要比较两个运算数才得出结果,因而性能上&&和||会比&和|好。

功能用法

&&和||只能进行逻辑运算,而&和|除了可以进行"逻辑运算"外,还可以进行位运算

 

7.substring()与substr():

java中只有substring()方法,js中substring()和substr()都有。

java中的substring(beginIndex,endIndex)是从角标beginIndex开始截取到endIndex-1结束(即含头不含尾),substring(beginIndex)是从beginIndex(含)开始截取后面所有的。

js中的substring(beginIndex,endIndex)同java的,还有个substr(start,length)是从 start 下标开始的length个字符。

 

8.for循环

java可写成for(String s : ss){}类型的,而js不可以,只能老老实实写for(var i=0;i<ss.length;i++){}类型的或for...in 循环:

var person={fname:"Bill",lname:"Gates",age:56};

for (x in person)
  {
  txt=txt + person[x];
  }

 

9.都有的:new Object()、

都可把String赋值给Object

java:

Object o = "sdf";

js:

var b= new Object();

b="sdf";

或var b= new Object("sdf");//双引号

或var b= new Object('sdf');//单引号

但java中不可写成Object o = new Object("sdf");

 

10.类型判断

java中判断类型用obj.getClass().toString()

js中用typeof obj 或 typeof(obj)、Object.prototype.toString.call、obj.constructor、instanceof(不推荐使用,很容易判断出错)、$.type

参考:https://www.cnblogs.com/a546558309/p/3608194.html

js检测变量类型:typeof
typeof   123   //Number
typeof   'abc'  //String
typeof    true       //Boolean
typeof    undefined   //Undefined
typeof    null        //Object
typeof    { }           //Object
typeof    [ ]           //Object
typeof    console.log()       //Function

js的instanceof的使用

function Person(){};

var p =new Person();

console.log(p instanceof Person);//true

但为什么还是不推荐使用,看例子:

var simpleStr = "This is a simple string"; 
console.log(simpleStr instanceof String);//false

出乎意料吧,还敢用吗

总结:1. 一般简单的使用 typeof 或 instanceof 检测(这两种检测的不完全准确)

         2. 完全准确的使用 原生js中的 Object.prototype.toString.call  或 jquery中的 $.type 检测

参考:

http://www.cnblogs.com/zhangruiqi/p/8027338.html

https://www.cnblogs.com/SourceKing/p/5766210.html

https://www.cnblogs.com/Trr-984688199/p/6180040.html

https://www.cnblogs.com/onepixel/p/5126046.html

 

11.indexOf()

都有indexOf()的用法,用于查指定字符串首次出现的位置(从0开始的角标);

也都有lastIndexOf()。

 

12.正则表达式区别

java与js的正则表达式的区别:参考:https://blog.csdn.net/superit401/article/details/79713730

 

13.字符串转换成整型

java与js的字符串转换成整型:java:Integer.parseInt();js:parseInt()

 

14.变量(数据)类型

java:

8个基本类型:byte、short、int、long、float、double、boolean、char

引用类型:除了四类八种基本类型外,所有的类型都称为引用类型,如String、数组、Object、class、interface、

js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null)和三大引用类型:Object、Array、Function。

 

15.变量定义

java变量定义时可以不赋值(只定义类型),但是用前必须赋值使其初始化;

js变量定义时可以不赋值直接使用(不报错)

var a;
alert(a+"www");//undefinedwww

又如

var a;
alert(a+1);//NaN

js定时变量时可以不声明类型直接赋值(js自动识别类型,var就是个广义的、不确定的类型,你给它赋值成什么类型的它会自动识别,var可省略)

a=-0;
alert(a+1);//1

 

16.数组声明

java数组

不同的是java中没有Array array = new Array()的写法。

double[] myList = {1.9, 2.9, 3.4, 3.5};//只可用于初始化,不能给object赋值

Object obj = {1.9, 2.9, 3.4, 3.5};//报错,理由:只可用于初始化

但是Object obj = new int[]{3, 1, 2, 6, 4, 2};不报错

int[] d = new int[]{3, 1, 2, 6, 4, 2};

 double[] myList = new double[3];
      myList[0] = 5.6;
      myList[1] = 4.5;
      myList[2] = 3.3;
多维数组
String s[][] = new String[2][];
s[0] = new String[2];
s[1] = new String[3];
s[0][0] = new String("Good");
s[0][1] = new String("Luck");
s[1][0] = new String("to");
s[1][1] = new String("you");
s[1][2] = new String("!");

js数组
var cars=new Array();//注:此处可为new Array(n),但数字n不起作用,可带可不带n
cars[0]="Audi";
cars[1]="BMW";
cars[2]="Volvo";

var cars=new Array("Audi","BMW","Volvo");

var cars=["Audi","BMW","Volvo"];

判断是否为数组的方法:

Array.isArray(cars);

---------------

java数组:int[] left = {};

js数组:var left = [];

但是js数组有push、slice等方法:left.push(12);      left.slice(2);

java数组没有这些方法。

 

17.对象声明

java对象声明有5种方式:使用new关键字、使用Class类的newInstance方法、使用Constructor类的newInstance方法    、使用clone方法、使用反序列化。
①使用new关键字
Employee emp1 = new Employee();

②使用Class类的newInstance方法
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
或者
Employee emp2 = Employee.class.newInstance();

③使用Constructor类的newInstance方法
Constructor<Employee> constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();

④使用clone方法
Employee emp4 = (Employee) emp3.clone();

⑤使用反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();

参考:https://www.cnblogs.com/wxd0108/p/5685817.html

 

js对象

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数、数学和正则表达式

String、Date、Array、Boolean、

此外,JavaScript 允许自定义对象。

①通过object方式创建

person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";

通过”字面量“方式创建

js对象直接声明:
var person={firstname:"Bill", lastname:"Gates", id:5566};
空格和折行无关紧要。声明可横跨多行:
var person={
firstname : "Bill",
lastname  : "Gates",
id        :  5566
};

③通过”构造函数“方式创建

function person(firstname,lastname,age,eyecolor) {

          this.firstname=firstname;

          this.lastname=lastname;

          this.age=age;

          this.eyecolor=eyecolor;

}

一旦您有了对象构造器,就可以创建新的对象实例,就像这样:

var myFather=new person("John","Doe",50,"blue");

 

对象属性有两种寻址方式:
name=person.lastname;
name=person["lastname"];

参考:http://www.w3school.com.cn/js/js_objects.asp

https://www.cnblogs.com/dongjc/p/5179561.html

https://www.cnblogs.com/zczhangcui/p/6389023.html

https://www.cnblogs.com/nuannuan7362/p/6368102.html

https://www.cnblogs.com/juggdxy/p/8245491.html

https://www.cnblogs.com/Jener/p/5878858.html

https://www.cnblogs.com/petterMother/articles/3665358.html

https://www.cnblogs.com/zyiii/p/8822550.html

18.js变量具体声明

(1)String类型声明

java:

String s = "abc"; 或  String s = new String("abc");    

js:

var s=new String;//s值为""
var s=new String();//s值为""
var s=new String("df");
var s=new String('df');
typeof(s);//object

(2)数字类型声明

java:

直接赋值或使用包装类自动拆装,如:

int i = new Integer(3);

js:

var x=      new Number;//x值为0
var x=      new Number();x值为0
var x=      new Number(56.90);
typeof(x);//object

(3)布尔型声明

java:

直接赋值或使用包装类自动拆装,如:

boolean b = new Boolean(false);

js:
var y=      new Boolean;//y值为false
var y=      new Boolean();//y值为false
var y=      new Boolean(true);//y值为true
var y=      new Boolean(1);//y值为true,但java没有此用法
var y=      new Boolean(0);//y值为false,但java没有此用法
typeof(y);//object

(4)数组类型
var c=   new Array;
var c=   new Array();
var c=   new Array("Audi","BMW","Volvo");
typeof(c);//object

参考 16.数组声明

(5)对象
var b= new Object;
var b= new Object(value);//value {number | bool | string} :一个数字、布尔值或者字符串,返回对应类型

//var b= new Object(firstname:"Bill", lastname:"Gates", id:5566);//报错
typeof(b);//object
b={firstname:"Bill", lastname:"Gates", id:5566};

参考 17.js变量具体声明

 

19.encode和decode

java:

String str = URLEncoder.encode("中国","utf-8");
System.out.println(str);//%E4%B8%AD%E5%9B%BD
//解码
String str1=URLDecoder.decode(str, "UTF-8");
System.out.println(str1);//中国

js:

传参:用encodeURI("url参数")将url编码 
收参:用decodeURI("接收到的值")解码

encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

encodeURI方法不会对下列字符编码  ASCII字母、数字、~!@#$&*()=:/,;?+'

encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!*()'

所以encodeURIComponent比encodeURI编码的范围更大。

encodeURIComponent适合编码URL中的参数。

20.判断undefined

java:未定义变量就使用就会提示报错

js:

if( typeof(document.mylist.length) != "undefined" ) {} 

或 
if( !isNaN(document.mylist.length) ) {} 
typeof的运算数未定义,返回的就是 "undefined". 

错误用法:

if(document.mylist.length != "undefined" ) {}

 21.类型转换

字符串转数字(以int为例)

java:

第一种:Integer.parseInt(s);

第二种:i=Integer.valueOf(s).intValue();

js:

Number类型的数值转换方式可能通过三个函数:Number()parseInt()parseFloat()

int转String:

java:

第一种方法:s=i+"";
第二种方法:s=String.valueOf(i);

第三种方法: Integer.toString(i);
js:

数字转String:

i.toString();

new String(10);

 String(123);

更多方法:

 

方法 描述
toExponential() 把对象的值转换为指数计数法。
toFixed() 把数字转换为字符串,结果的小数点后有指定位数的数字。
toPrecision() 把数字格式化为指定的长度。

将日期转为字符串

java:

SimpleDateFormat sdf =   new SimpleDateFormat( " yyyy年MM月dd日 " ); 
String str = sdf.format(new Date());

或Date date = new Date();
    System.out.println(date.toInstant());//2019-03-06T08:55:30.167Z

或System.out.println(date.toString());//Wed Mar 06 16:56:12 CST 2019

或System.out.println(date.toLocaleString());//2019-3-6 16:57:04

js:

String(new Date()) ;

或obj = new Date()
obj.toString();

 将日期转为数字

java:

Date date = new Date();
        System.out.println(date.getTime());//1551862817140

js:

d = new Date();
Number(d) ;

或d.getTime();

布尔值转为字符串

java:

String.valueOf(b);

或b+"";

js:

String(false)        // 返回 "false"
String(true)         // 返回 "true"

false.toString()     // 返回 "false"
true.toString()      // 返回 "true"

将布尔转为数字

java:

不能转换

js

全局方法 Number() 可将布尔值转换为数字。

Number(false)     // 返回 0
Number(true)      // 返回 1


自动类型转换

java:

Integer和int自动相互转换,其他Double、Float。。。类似

5 + null       //会报错

"5" - 1       //会报错

js:

5 + null    // 返回 5         null 转换为 0

"5" - 1     // 返回 4         "5" 转换为 5

参考:http://www.runoob.com/js/js-type-conversion.html

 

22.null与undefined

java

null:对象定义但没有初始化或赋值,程序一般不会报错也不会终止

undefined:未定义对象,程序会报错而终止

js

null:是一个表示无的对象,转换为数值为0;

如:

alert(null == document.getElementById('notExistElement')); //true(仅当页面上不存在id为"notExistElement"的DOM节点时)


undefined:表示一个无的原始值,转化为数值为NAN(与任何数字相加也为NAN)

如:

var oValue;  
alert(oValue == undefined); //true

undefined出现原因:(口诀:一变量二函数一对象)

           1.变量被声明了但是没赋值时

           2.调用函数时,应该提供的参数没提供,则该参数为undefined

           3.函数没有返回值时,默认返回undefined

           4.对象没有赋值的属性

null出现原因

           1.作为函数的参数,表示该函数的参数不是对象

           2.作为对象原型链的终点

Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。
Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

alert(typeof undefined); //undefined  
alert(typeof null); //object 
alert(null == undefined); //true
alert(null === undefined); //false 
alert(typeof null == typeof undefined); //false  

null与undefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false。

23.字符串与数字比较

java中:

"23"==23,返回false

js中:

"23"==23,返回true

24.replace(reg,substr)用法相同:reg有(匹配到)则替换,没有则返回原字符串,且原字符串都不会被改变。

 java:

String source = "fhsuirr";
System.out.println(source.replace("tt", ""));
System.out.println(source);

js:

var source = "fhsuirr";
alert(source.replace("rr", ""));
alert(source);


本文转载:CSDN博客