用Java来比较JavaScript的一些特性
由于是从java做到JavaScript,所以对强弱语言类型,还是比较敏感的。JavaScript是弱语言,只严格区分数据和指令。简单描述下自己对两者之间的一些区别吧。
1、JavaScript变量的类型取决于右侧的对象。
JavaScript:
var variable_name = new Object();
Java:
Object variable_name = new Object();
2、JavaScript没有块级作用域,
Java:
if(true) {
Object a = 1;
}
System.out.println(a); // 编译错误,超出作用域
JavaScript:
if(true){
var a = 1;
}
console.log(a); // 1 JavaScript没有块级作用域
而JavaScript的作用域一般体现在函数作用域上。
3.比较特别的是JavaScript会把声明提前,像这样
function test() {
console.log(a); // 输出undefined,而不是变量not defined,说明函数声明提前了,但是初始化没提前,所以输出的不是1
var a = 1;
}
test();
function test2(){
var a = 1;
if(true) {
console.log(a); // 输出也是undefined,而不是1
var a = 2;
}
}
test2();
4.JavaScript没有像Java一样可以直接调用成员变量的语法,通常只能是:
var data = {'one':1,'two':2};
with(data) { // 模拟作用域,在use strict严格模式下会抛语法错误
console.log(one);// 输出 1
console.log(two);// 输出 2
}
值得注意的是上面with使用的作用域内,只能对已有的属性进行操作,而不能创建新属性。同时在use strict模式下,还限制了arguments对象的callee和caller两个属性的使用,一用就会报错。之前接手的嵌入式web端有用setTimeout实现setInterval功能的,就是调用了callee,代表正在执行的方法,就好像接力棒一样,但明显这在严格模式下是无法使用的。
5.在ECMAScript5的标准里多了一些函数式编程的方法,主要是Array对象的实例方法forEach、reduce,或者就是我们经常使用的回调,把函数作为参数传递的,跟高阶函数有点相似,但是没有返回函数。作为一个前端开发人员,对于下面这样的回调方法应该很熟悉
$.post('url:getData',function(data){
if(data) console.log(data);// 将函数作为参数传递进去,然后在post方法里面调用这个匿名函数
});
6.JavaScript无法正确地表示0.1这样的简单小数,尽管在数值上已经非常接近,但在进行equals类似的操作时仍会出错,解决方案有将小数点左右两侧的数据分开来计算之后再合并。
JavaScript真是一门特别有魅力的语言,还有很多东西需要探索,自己给自己加加油 哈哈。
用Java来比较JavaScript的一些特性的更多相关文章
- Java 8 新特性-菜鸟教程 (7) -Java 8 Nashorn JavaScript
Java 8 Nashorn JavaScript Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java ...
- javascript进阶——面向对象特性
面向对象的javascript是这门语言被设计出来时就考虑的问题,熟悉OOP编程的概念后,学习不同的语言都会发现不同语言的实现是不同的,javascript的面向对象特性与其他具有面向对象特性的语言的 ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java9发布回顾Java 8的十大新特性
java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9. 今天,我们先来一起复习一下2014年发布的Java 8的十大新特性.先来喝杯java~~~ 按 ...
- Java 8 Nashorn JavaScript
转自:https://www.runoob.com/java/java8-nashorn-javascript.html Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Na ...
- 从 prototype.js 深入学习 javascript 的面向对象特性
从 prototype.js 深入学习 javascript 的面向对象特性 js是一门很强大的语言,灵活,方便. 目前我接触到的语言当中,从语法角度上讲,只有 Ruby 比它更爽. 不过我接触的动态 ...
- javascript 的面向对象特性参考
最近在看用javascript+css实现rich client.javascript 也是一个蛮有意思的语言.特别是其面向对象的实现和其他“标准”的OO launguage有很大的不同.但是,都是动 ...
- 深入理解JavaScript的闭包特性如何给循环中的对象添加事件
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- 前端学习 第三弹: JavaScript语言的特性与发展
前端学习 第三弹: JavaScript语言的特性与发展 javascript的缺点 1.没有命名空间,没有多文件的规范,同名函数相互覆盖 导致js的模块化很差 2.标准库很小 3.null和unde ...
随机推荐
- C#摇奖程序
private void Form1_Load(object sender, EventArgs e) { //取消跨线层访问控件的判断 Control.CheckForIllegalCrossThr ...
- mongodb一个关键字对多个字段同时查询,mongodb $or $and查询
$query = '{ "$and": [ {"$or": [{"reported": {"$ex ...
- 转载:Tomcat多数据源配置方法
转载网址:http://blog.sina.com.cn/s/blog_53803b7b010144u5.html 关于在TOMCAT下配置多数据源,网上有很多方式,但是感觉也很混乱,俺只说俺们使用的 ...
- Redis VS Memcached 转载
引子: 在大数据时代,总希望存在一个Key-value存储机制,像HashMap一样在内存中处理大量(千万数量级)的key-value对,以便提高数据查找.修改速度. 所以,我们会想到,Memcach ...
- mongodb spring
可参考 http://blog.csdn.net/cuiran/article/details/8287204 我修改后的代码 http://pan.baidu.com/s/1mgJYbaC
- stack适配栈
#include <stack> stack<int> s; s.empty() 如果栈为空,则返回 true,否则返回 stack s.size() 返回栈中元素的个数 s. ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
- Selenium2Library+ride学习笔记
一.环境部署 1.安装python2.7编译环境.ride环境以及Selenium2Library环境,环境部署可参见前面几节. 2.启动RIDE编译环境,导入Selenium2Library库. ...
- Delphi流的操作 转
一.流的概念 流简单说是建立在面向对象基础上的一种抽象的处理数据的工具,它定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员只需掌握对流进行操作,而不用关心流的另一头数据的真正流向.其实,流 ...
- log4j 突然不打印记录,提示:No appenders could be found for logge,处理方法
log4j 一直都在使用正常,log4j.xml配置.代码都没有修改,突然不打印记录,出现下面提示: log4j:WARN No appenders could be found for logger ...