此文先从语法角度讲述,会持续总结更新,先开个篇再说,有想法的同学也可以在下面留言。
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 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 js的instanceof的使用: function Person(){}; var p =new Person(); console.log(p instanceof Person);//true 但为什么还是不推荐使用,看例子: var simpleStr = "This is a simple string"; 出乎意料吧,还敢用吗 总结: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; 又如 var a; js定时变量时可以不声明类型直接赋值(js自动识别类型,var就是个广义的、不确定的类型,你给它赋值成什么类型的它会自动识别,var可省略): a=-0; 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]; js数组 判断是否为数组的方法: 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方法、使用反序列化。 ②使用Class类的newInstance方法 ③使用Constructor类的newInstance方法 ④使用clone方法 ⑤使用反序列化 参考:https://www.cnblogs.com/wxd0108/p/5685817.html js对象: JavaScript 中的所有事物都是对象:字符串、数值、数组、函数、数学和正则表达式 String、Date、Array、Boolean、 此外,JavaScript 允许自定义对象。 ①通过object方式创建 person=new Object(); ②通过”字面量“方式创建 js对象直接声明: ③通过”构造函数“方式创建 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"); 对象属性有两种寻址方式: 参考: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值为"" (2)数字类型声明 java: 直接赋值或使用包装类自动拆装,如: int i = new Integer(3); js: var x= new Number;//x值为0 (3)布尔型声明 java: 直接赋值或使用包装类自动拆装,如: boolean b = new Boolean(false); js: (4)数组类型 参考 16.数组声明 (5)对象 //var b= new Object(firstname:"Bill", lastname:"Gates", id:5566);//报错 参考 17.js变量具体声明 19.encode和decode java: String str = URLEncoder.encode("中国","utf-8"); js: 传参:用encodeURI("url参数")将url编码 encodeURI() 函数是不会进行转义的:;/?:@&=+$,# 不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。 encodeURI方法不会对下列字符编码 ASCII字母、数字、~!@#$&*()=:/,;?+' encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!*()' 所以encodeURIComponent比encodeURI编码的范围更大。 encodeURIComponent适合编码URL中的参数。 20.判断undefined java:未定义变量就使用就会提示报错 js: 错误用法: 21.类型转换 字符串转数字(以int为例): java: 第一种:Integer.parseInt(s); 第二种:i=Integer.valueOf(s).intValue(); js: Number类型的数值转换方式可能通过三个函数:Number()、parseInt()、parseFloat()。 int转String: java: 第一种方法:s=i+""; 第三种方法: Integer.toString(i); 数字转String: i.toString(); new String(10); String(123); 更多方法: 将日期转为字符串 java: SimpleDateFormat sdf = new SimpleDateFormat( " yyyy年MM月dd日 " ); 或Date date = new Date(); 或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() 将日期转为数字 java: Date date = new Date(); js: d = new Date(); 或d.getTime(); 布尔值转为字符串 java: String.valueOf(b); 或b+""; js: String(false) // 返回 "false" 或 false.toString() // 返回 "false" 将布尔转为数字 java: 不能转换 全局方法 Number() 可将布尔值转换为数字。 Number(false) // 返回 0 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; 如: 如: undefined出现原因:(口诀:一变量二函数一对象) 1.变量被声明了但是没赋值时 2.调用函数时,应该提供的参数没提供,则该参数为undefined 3.函数没有返回值时,默认返回undefined 4.对象没有赋值的属性 null出现原因 1.作为函数的参数,表示该函数的参数不是对象 2.作为对象原型链的终点 Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。 null与undefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false。 23.字符串与数字比较 java中: "23"==23,返回false js中: "23"==23,返回true 24.replace(reg,substr)用法相同:reg有(匹配到)则替换,没有则返回原字符串,且原字符串都不会被改变。 java: String source = "fhsuirr"; js: var source = "fhsuirr";var person={fname:"Bill",lname:"Gates",age:56};
for (x in person)
{
txt=txt + person[x];
}
typeof 123 //Number
typeof 'abc' //String
typeof true //Boolean
typeof undefined //Undefined
typeof null //Object
typeof { } //Object
typeof [ ] //Object
typeof console.log() //Function
console.log(simpleStr instanceof String);//false
alert(a+"www");//undefinedwww
alert(a+1);//NaN
alert(a+1);//1
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("!");
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"];
①使用new关键字
Employee emp1 = new Employee();
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
或者
Employee emp2 = Employee.class.newInstance();
Constructor
Employee emp3 = constructor.newInstance();
Employee emp4 = (Employee) emp3.clone();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";
var person={firstname:"Bill", lastname:"Gates", id:5566};
空格和折行无关紧要。声明可横跨多行:
var person={
firstname : "Bill",
lastname : "Gates",
id : 5566
};
name=person.lastname;
name=person["lastname"];
var s=new String();//s值为""
var s=new String("df");
var s=new String('df');
typeof(s);//object
var x= new Number();////x值为0
var x= new Number(56.90);
typeof(x);//object
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
var c= new Array;
var c= new Array();
var c= new Array("Audi","BMW","Volvo");
typeof(c);//object
var b= new Object;
var b= new Object(value);//value {number | bool | string} :一个数字、布尔值或者字符串,返回对应类型
typeof(b);//object
b={firstname:"Bill", lastname:"Gates", id:5566};
System.out.println(str);//%E4%B8%AD%E5%9B%BD
//解码
String str1=URLDecoder.decode(str, "UTF-8");
System.out.println(str1);//中国
收参:用decodeURI("接收到的值")解码if( typeof(document.mylist.length) != "undefined" ) {}
或
if( !isNaN(document.mylist.length) ) {}
typeof的运算数未定义,返回的就是 "undefined".
if(document.mylist.length != "undefined" ) {}
第二种方法:s=String.valueOf(i);
js:
方法
描述
toExponential()
把对象的值转换为指数计数法。
toFixed()
把数字转换为字符串,结果的小数点后有指定位数的数字。
toPrecision()
把数字格式化为指定的长度。
String str = sdf.format(new Date());
System.out.println(date.toInstant());//2019-03-06T08:55:30.167Z
obj.toString();
System.out.println(date.getTime());//1551862817140
Number(d) ;
String(true) // 返回 "true"
true.toString() // 返回 "true"js:
Number(true) // 返回 1
自动类型转换alert(null == document.getElementById('notExistElement')); //true(仅当页面上不存在id为"notExistElement"的DOM节点时)
undefined:表示一个无的原始值,转化为数值为NAN(与任何数字相加也为NAN)var oValue;
alert(oValue == undefined); //true
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
System.out.println(source.replace("tt", ""));
System.out.println(source);
alert(source.replace("rr", ""));
alert(source);