Questions tagged «javascript»

JavaScript(不要与Java混淆)是一种高级,动态,多范式,弱类型的语言,用于客户端脚本和服务器端脚本。使用此标记可解决有关ECMAScript,JavaScript,JScript等的常见实现的问题。JS通常不引用其ECMA-表兄弟ActionScript。

12
为什么最近转向从Java脚本中删除/省略分号?
最近,从Java语言中省略分号似乎很流行。几年前有一篇博客文章强调,在Javascript中,分号是可选的,并且文章的主旨似乎是您不必理会它们,因为它们是不必要的。该帖子被广泛引用,并没有给出任何令人信服的理由不使用它们,只是将它们排除在外几乎没有副作用。 甚至GitHub都跳上了无分号的潮流,要求它们省略任何内部开发的代码,并且其维护者最近对zepto.js项目的承诺已从代码库中删除了所有分号。他的主要论据是: 这是他团队的优先事项; 打字少 还有其他好的理由将其排除在外吗? 坦白说,我看不出没有理由忽略它们,当然也没有理由回过头来删除它们。这也违背了(多年的)推荐做法,我并不真的赞成“货运崇拜”的说法。那么,为什么最近都讨厌分号?短缺迫在眉睫吗?还是这只是最新的Javascript时尚?

4
为什么许多软件开发人员违反开放/封闭原则?
为什么许多软件开发人员通过修改诸如重命名功能之类的东西在升级后会破坏应用程序而违反了开放/关闭原则? 在React库中出现快速和连续版本之后,这个问题就跳到了我的头上。 每隔一小段时间,我就会注意到语法,组件名称等方面的许多更改。 即将发布的React版本中的示例: 新的弃用警告 最大的变化是我们将React.PropTypes和React.createClass提取到了自己的包中。两者仍然可以通过主React对象访问,但是在开发模式下,使用其中任何一个都会将一次性弃用警告记录到控制台。这将使将来的代码大小优化成为可能。 这些警告将不会影响您的应用程序的行为。但是,我们意识到它们可能会引起一些挫败感,特别是如果您使用将console.error视为失败的测试框架。 这些更改是否被视为违反该原则? 作为React之类的初学者,我如何通过库中的这些快速更改来学习它(这是如此令人沮丧)?

4
JavaScript是按设计解释的吗?
我对此问题持谨慎态度,因为它可能看起来过于挑剔。我刚刚打开了JavaScript:权威指南,它指出了第一章第一页的内容。 “ JavaScript是一种高级,动态,无类型的解释型编程语言” 因此,我是否认为解释部分是语言规范中的要求,还是在尊重一种语言及其多种实现之间的差异时说该语言是一种解释性编程语言是否会产生误导? 显然没有用于JavaScript的静态编译器-https: //stackoverflow.com/questions/1118138/is-there-a-native-machine-code-compiler-for-javascript,所以也许这只是对此的一种反映。
73 javascript 


14
以动态类型的语言从单个函数返回不同的数据类型不是一个好主意吗?
我的主要语言是静态类型(Java)。在Java中,您必须从每个方法返回单个类型。例如,您不能使用有条件返回a String或有条件返回a的方法Integer。但是例如在JavaScript中,这是很有可能的。 用静态类型的语言,我明白了为什么这是一个坏主意。如果返回Object了每个方法(所有类都继承自该方法的公共父级),那么您和编译器将不知道您在处理什么。您必须在运行时发现所有错误。 但是在动态类型语言中,甚至可能没有编译器。在动态类型的语言中,对于我来说,为什么返回多个类型的函数不是一个好主意并不为人所知。我在静态语言方面的背景使我避免编写此类函数,但是我担心自己会紧盯着一种功能,该功能可以使我的代码更清晰一些,从而无法看到。 编辑:我将删除我的示例(直到我可以想到一个更好的示例)。我认为这引导人们回答我不想提出的观点。

4
不使用JSF的原因[关闭]
我是StackExchange的新手,但我认为您可以为我提供帮助。 我们正在创建一个新的Java Enterprise应用程序,以替换旧版JSP解决方案。由于许多更改,UI和业务逻辑的各个部分将被完全重新考虑和重新实现。 我们首先想到的是JSF,因为它是Java EE中的标准。起初,我印象深刻。但是现在,我正在尝试实现一个功能原型,并且对使用它确实有一些严重的担忧。 首先,它创建了我见过的最糟糕,最混乱的无效伪HTML / CSS / JS混合。它违反了我在网络开发中学到的每一个规则。此外,它把所有东西紧密结合在一起:布局,设计,逻辑和与服务器的通信。我看不到如何舒适地扩展此输出,无论是使用CSS样式,添加UI糖果(例如可配置的热键,拖放小部件)还是其他方法。 其次,它太复杂了。它的复杂性非常出色。如果您问我,这是对基本Web技术的拙劣抽象,最终变得残废无用。我有什么好处?没有,如果您考虑的话。数百个组件?我看到了数以万计的HTML / CSS片段,数万个JavaScript片段以及成千上万个jQuery插件。它解决了很多问题-如果不使用JSF,就不会有。或完全是前控制器模式。 最后,我认为我们将不得不在两年之内重新开始。我看不到如何实现所有第一个GUI模型(此外;我们的团队中没有JSF专家)。也许我们可以以某种方式将其破解。然后会有更多。我确信我们可以破解我们的黑客。但是在某些时候,我们会陷入困境。由于服务层之上的所有内容都由JSF控制。我们将不得不重新开始。 我的建议是使用JAX-RS实现REST api。然后用客户端MVC创建一个HTML5 / Javascript客户端。(或MVC的某种风格。)顺便说一句;无论如何,我们都将需要REST api,因为我们也在开发部分Android前端。 我怀疑JSF是当今最好的解决方案。随着互联网的发展,我真的不明白为什么要使用这种“耙子”。 现在,优点/缺点是什么?我如何强调我不使用JSF的观点?在我的建议下使用JSF有什么优点?

15
有什么理由不直接从客户端Javascript转到数据库吗?
可能重复: 编写Web“服务器少”应用程序 因此,假设我要构建一个Stack Exchange克隆,然后决定使用CouchDB之类的东西作为我的后端存储。如果我使用它们的内置身份验证和数据库级别授权,是否有任何理由不允许客户端Javascript直接写入可公开使用的CouchDB服务器?因为这基本上是一个CRUD应用程序,并且业务逻辑由“只有作者才能编辑他们的帖子”组成,所以我认为在客户端内容和数据库之间没有一层的必要性很高。我只是在CouchDB端使用验证,以确保没有人放入垃圾数据,并确保正确设置权限,以便用户只能读取自己的_user数据。渲染将通过类似于AngularJS的客户端完成。从本质上讲,您可能只拥有一个CouchDB服务器和一堆“静态”页面,因此一切顺利。您不需要任何类型的服务器端处理,而只需要一些可以处理HTML页面的内容即可。 向世界开放我的数据库似乎是错误的,但是在这种情况下,只要正确设置权限,我就无法想到为什么。这违背了我作为Web开发人员的本能,但我想不出一个很好的理由。那么,为什么这是个坏主意呢? 编辑:看起来这里有一个类似的讨论:编写Web“服务器少”应用程序 编辑:到目前为止,很棒的讨论,我感谢大家的反馈!我觉得我应该添加一些通用假设,而不是专门调用CouchDB和AngularJS。因此,我们假设: 数据库可以直接从其隐藏存储对用户进行身份验证 所有数据库通信都将通过SSL进行 数据验证可以(但不应这样做)由数据库处理 除了管理员功能外,我们关心的唯一授权是仅允许某人编辑自己的帖子 每个人都可以读取所有数据(除了可能包含密码哈希的用户记录之外),我们非常满意 管理功能将受到数据库授权的限制 没有人可以将自己添加为管理员角色 数据库相对容易扩展 真正的商业逻辑几乎没有,甚至没有。这是一个基本的CRUD应用

8
客户端编码:如何防止恶意使用?
在过去的几年中,客户端(浏览器)应用程序的趋势确实起飞了。 对于我的最新项目,我决定尝试与时俱进,并编写一个客户端应用程序。 此应用程序的一部分涉及向用户发送交易电子邮件(例如,验证注册,密码重置电子邮件等)。我正在使用第三方API发送电子邮件。 通常,我会让我的应用程序在服务器上运行。我会从服务器上的代码中调用第三方API。 运行客户端应用程序意味着这现在需要在用户的浏览器上进行。第三方API提供了实现此目的所需的JavaScript文件。 我看到的第一个明显问题是我需要使用API​​密钥。通常,这通常可以安全地存储在我的服务器上,但是现在大概需要将这个密钥提供给客户端浏览器。 假设我可以解决这个问题,那么下一个问题就是阻止精通技术的用户在浏览器上加载JavaScript开发人员工具并以他们喜欢的方式使用电子邮件API,而不是坚持我在应用程序中设置的任何规则。 我想我的一般问题是-我们如何防止恶意使用客户端应用程序?

3
为什么JavaScript框架/库具有纯JavaScript中已经存在的功能?
我想知道为什么框架/库虽然本身已经存在,但是却有自己的帮助器。 让我们以jQuery和AngularJS为例。它们具有自己的each迭代器功能: jQuery.each() angular.forEach() 但是我们有Array.prototype.forEach。 同样, jQuery.parseJSON() angular.fromJson() 但是我们JSON.parse()在原始JavaScript中具有该功能。

8
人们为什么禁用JavaScript?
我昨天问了一个问题,我应该为JavaScript禁用而烦恼吗?。我认为共识是:是的,我应该为JavaScript Disabled开发。现在,我只想了解为什么用户禁用JS。似乎许多开发人员(我想回答问题的人都是开发人员)都禁用了JS。这是为什么。用户为什么禁用JS?为了安全?速度?要不然是啥?

2
什么时候不使用Google Web Toolkit?[关闭]
我正在考虑在一个主要的内部Web应用程序开发项目中使用GWT,即在我眼中,它的主要优势是与Javascript的交叉编译,这将(至少从理论上讲)帮助我的团队将技术堆栈的大小减少一倍。 。 但是,像以前一样(像大多数开发人员一样)被烧掉了,我想听听那些确实在GWT的任何问题上实际使用过它的程序员,这些问题可能会阻碍或限制它在某个问题领域内的使用。 反对使用GWT的理由是什么?为什么?
55 java  javascript  ajax  gwt 

12
在您的JavaScript中使用PHP是否被视为不良做法
在这个网站上,有很多次我看到有人试图做这样的事情: <script type="text/javascript"> $(document).ready(function(){ $('<?php echo $divID ?>').click(funtion(){ alert('do something'); }); }); </script> 我认为这不是人们自然会陷入的某种模式。必须有某种形式的教程或学习材料来说明这一点,否则我们不会看到太多。我要问的是,我在这方面做得太大了吗,或者这真的是不好的做法吗? 编辑: 正在和我的一个朋友谈论这件事,他经常在他的JavaScript中放入红宝石,他提出了这一点。 是否可以在JavaScript中动态放置应用程序范围的常量,这样就不必编辑两个文件。例如... MYAPP.constants = <php echo json_encode($constants) ?>; 还可以直接对计划在库中使用的数据进行编码 ChartLibrary.datapoints = <php echo json_encode($chartData) ?>; 还是我们应该每次都拨打AJAX?

8
进行多线程JavaScript运行时实现的缺点是什么?[关闭]
在过去的一周中,我一直在研究多线程JavaScript运行时实现。我有一个使用JavaScriptCore和boost的C ++概念证明。 该体系结构很简单:当运行时完成对主脚本的评估后,它将启动并加入线程池,该线程池开始从共享优先级队列中选择任务,如果两个任务尝试同时访问变量,它将被标记为atomic,并且争夺访问权限。 问题是,当我向JavaScript程序员展示此设计时,我得到了非常负面的反馈,我也不知道为什么。即使是私下里,他们都说JavaScript是单线程的,必须重写现有的库,而如果我继续从事这一工作,gremlins将产生并吞噬一切生物。 我最初也有一个本地协程实现(使用boost上下文),但是我不得不放弃它(JavaScriptCore对于堆栈是很古怪的),并且我不想冒险,所以我决定不提它。 你怎么看?JavaScript是单线程的吗,应该单独使用吗?为什么每个人都反对并发JavaScript运行时的想法? 编辑:该项目现在位于GitHub上,您可以自己尝试一下,让我知道您的想法。 以下是无争用地在所有CPU内核上并行运行的承诺的图片:

1
使用script标签包含JavaScript文件的最佳方法是什么?
我通常使用如下脚本标签包含JavaScript文件。 <script type="text/javascript" src="somefile.js"></script> 我也看到一些人也使用language属性。 如今,我发现许多人都忽略了type属性。我开始感觉到,如果JavaScript是默认的脚本语言,那么即使我也应该忽略type属性。忽略type属性会好吗?会引起什么问题吗?
50 javascript 

6
隐藏的AJAX请求伪造性能有多安全?
什么是隐藏的AJAX请求? 我注意到,旨在使用户操作立即发生的隐藏AJAX请求的使用率有所增加。我将这种类型的AJAX请求称为非阻塞。这是一个AJAX请求,用户没有意识到它正在发生,它是在后台执行的,它的操作是无声的(没有冗长的指示AJAX调用已成功完成)。目的是使操作看起来确实在尚未真正完成时立即发生。 这是非阻塞AJAX请求的示例; 用户单击电子邮件集合上的删除。这些项目会立即从其收件箱中消失,并且可以继续进行其他操作。同时,AJAX请求正在后台处理项目的删除。 用户填写新记录表格。单击保存。新项目将立即显示在列表中。用户可以继续添加新记录。 为了澄清起见,下面是阻止AJAX请求的示例; 用户单击电子邮件集合上的删除。出现沙漏光标。发出AJAX请求,并在响应时关闭沙漏光标。用户必须等待一秒钟才能完成操作。 用户填写新记录表格。单击保存。带有AJAX加载程序动画的表格会变成灰色。显示一条消息“您的数据已保存”,新记录出现在列表中。 上述两种情况之间的区别在于,非阻塞AJAX设置不提供操作执行的反馈,而阻塞AJAX设置提供。 隐藏的AJAX请求的风险 此类AJAX请求的最大风险是,当AJAX请求失败时,Web应用程序可能处于完全不同的状态。 例如,一个非阻塞示例; 用户选择一堆电子邮件。单击删除按钮。该操作似乎立即发生(项目从列表中消失)。然后,用户单击“撰写”按钮,并开始输入新电子邮件。这时JavaScript代码发现AJAX请求失败。该脚本可能会显示错误消息,但目前确实没有意义。 或者,一个阻塞的例子; 用户选择一堆电子邮件。单击删除按钮。看到一个沙漏,但是操作失败。他们收到一条错误消息,说“错误。等等等等”。它们将返回到电子邮件列表,并且仍然具有要删除的电子邮件。他们可以尝试再次删除它们。 执行非阻塞AJAX请求还存在其他技术风险。用户可以关闭浏览器,可以导航到另一个网站,并且他们可以导航到当前网络中的另一个位置,这使得任何错误响应的上下文都变得毫无意义。 那么为什么它变得如此受欢迎? Facebook,Google,Microsoft等。等等。所有这些大型域越来越多地使用非阻塞AJAX请求来使操作看起来像是立即执行的。我还看到没有保存或提交按钮的表单编辑器有所增加。离开字段或按Enter键。该值已保存。没有您的个人资料已更新消息或保存步骤。 AJAX请求不是确定的,在完成之前不应被视为成功,但是许多主要的Web应用程序正像这样运行。 这些使用非阻塞性AJAX调用来模拟响应式应用程序的网站是否冒着快速出现的代价冒着不必要的风险? 为了保持竞争力,我们所有人都应该遵循这种设计模式吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.