JS = Jian Shang,奸商,现在国内JS基本分为三种:
创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目网站设计制作、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元驿城做网站,已为上家服务,为驿城各地企业和个人服务,联系电话:13518219792
1.瞎要价,能蒙一个算一个的。(能用垃圾蒙的坚决用垃圾蒙)
2.直接用垃圾坑人的,价格只有更低,没有最低的(不排除用垃圾卖高价赚黑心钱的)、
3、瞎要价,信誓旦旦铁保绝对的好机,然后就狮子大开口。(遇到行情不懂的,或者似懂非懂的基本可以忽悠了)。
不排除,第三种类型的商家走的是良商的路线,固然很好。现在大部分论坛的商家基本都在树立自己的良好形象,说明商家基本发现做JS的路现在太难走了,钱越来越难赚了不说,还坏了自己的名声。 所以不如说这是JS们在战略上的转型,同样是为了达到谋取暴力,打出各种噱头来忽悠大众。我调查过黑莓同样功能,档次的机型(山寨机除外)黑莓的报价是出奇的高。曾今我看中过黑莓的一款机型,然后对比了一款功能差不多诺记行货。(注:黑莓的水货价和诺记的行货价进行的比较)结果黑莓价格是相当的高!基本上功能差不多的产品价格上不会太大误差,除非是什么奢华的定制机,或限量版。低端BB的价格现在已尽很透明了,所以现在JS基本看好高端BB。
在此提醒广大BBER,买BB的时候多多的进行同等配置的不同商品的对比,不要让奸商在价格上忽悠了,他就是再好的货,能值多少钱,自己先掂量下,调查清楚了再买。不要听他打着质量铁保的旗号,在价格上把你坑了,除非你认为钱无所谓,只要质量好就行。
71.IE 和标准下有哪些兼容性的写法
参考答案:
参与互动
72.变量提升
参考答案:
A、js 代码执行的过程
B、变量提升发生的环境:发生在代码所处的当前作用域。
解析:
对应面试题
参与互动
73.如何阻止冒泡与默认行为
参考答案:
解析:
当需要阻止冒泡行为时,可以使用
当需要阻止默认行为时,可以使用
参与互动
74.js 中 this 闭包 作用域
参考答案:
this:指向调用上下文
闭包:定义一个函数就开辟了一个局部作用域,整个 js 执行环境有一个全局作用域
作用域:一个函数可以访问其他函数中的变量(闭包是一个受保护的变量空间)
参与互动
75.javascript 的本地对象,内置对象和宿主对象
参考答案:
1.本地对象
ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象"。简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。它们包括:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
2.内置对象
JS中内置了17个对象,常用的是Array对象、Date对象、正则表达式对象、string对象、Global对象
3.宿主对象
由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象。所有的BOM和DOM都是宿主对象。
参与互动
76.javascript 的同源策略
参考答案:一段脚本只能读取来自于同一来源的窗口和文档的属性
解析:
同源策略:限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。(来自 MDN 官方的解释)
简单来说就是:一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合 具体解释:
(1)源包括三个部分:协议、域名、端口(http 协议的默认端口是 80)。如果有任何一个部分不同,则源不同,那就是跨域了。
(2)限制:这个源的文档没有权利去操作另一个源的文档。这个限制体现在:(要记住)
Cookie、LocalStorage 和 IndexDB 无法获取。
无法获取和操作 DOM。
不能发送 Ajax 请求。我们要注意,Ajax 只适合同源的通信。
同源策略带来的麻烦:ajax 在不同域名下的请求无法实现,需要进行跨域操作
参与互动
77.事件冒泡与事件捕获
参考答案:
事件冒泡:由最具体的元素(目标元素)向外传播到最不具体的元素
事件捕获:由最不确定的元素到目标元素
参与互动
78.foo = foo||bar ,这行代码是什么意思?为什么要这样写?
参考答案:
这种写法称为短路表达式
解析:
相当于
常用于函数参数的空判断
参与互动
79.复杂数据类型如何转变为字符串
参考答案:
参与互动
80.javascript 中 this 的指向问题
参考答案:
解析:
全局环境下,this 始终指向全局对象(window),无论是否严格模式;
2.1 普通函数
普通函数内部的 this 分两种情况,严格模式和非严格模式。
(1)非严格模式下,没有被上一级的对象所调用, this 默认指向全局对象 window。
(2)严格模式下,this 指向 undefined。
2.2 函数作为对象的方法
(1)函数有被上一级的对象所调用,那么 this 指向的就是上一级的对象。
(2)多层嵌套的对象,内部方法的 this 指向离被调用函数最近的对象(window 也是对象,其内部对象调用方法的 this 指向内部对象, 而非 window)。
特殊例子
2.3 原型链中的 this
(1)如果该方法存在于一个对象的原型链上,那么 this 指向的是调用这个方法的对象,就像该方法在对象上一样。
上述例子中,对象 p 没有属于它自己的 f 属性,它的 f 属性继承自它的原型。当执行 p.f()时,会查找 p 的原型链,找到 f 函数并执行。因为 f 是作为 p 的方法调用的,所以函数中的 this 指向 p。
(2)相同的概念也适用于当函数在一个 getter 或者 setter 中被调用。用作 getter 或 setter 的函数都会把 this 绑定到设置或获取属性的对象。
(3)call()和 apply()方法:当函数通过 Function 对象的原型中继承的方法 call() 和 apply() 方法调用时, 其函数内部的 this 值可绑定到 call() apply() 方法指定的第一个对象上, 如果第一个参数不是对象,JavaScript 内部会尝试将其转换成对象然后指向它。
(4)bind()方法:由 ES5 引入, 在 Function 的原型链上, Function.prototype.bind。通过 bind 方法绑定后, 函数将被永远绑定在其第一个参数对象上, 而无论其在什么情况下被调用。
2.4 构造函数中的 this
当一个函数用作构造函数时(使用 new 关键字),它的 this 被绑定到正在构造的新对象。
构造器返回的默认值是 this 所指的那个对象,也可以手动返回其他的对象。
特殊例子
当 this 碰到 return 时
2.5 setTimeout setInterval
(1)对于延时函数内部的回调函数的 this 指向全局对象 window;
(2)可以通过 bind()方法改变内部函数 this 指向。
3.1 作为一个 DOM 事件处理函数
当函数被用作事件处理函数时,它的 this 指向触发事件的元素(针对 addEventListener 事件)。
3.2 作为一个内联事件处理函数
(1)当代码被内联处理函数调用时,它的 this 指向监听器所在的 DOM 元素;
(2)当代码被包括在函数内部执行时,其 this 指向等同于 普通函数直接调用的情况,即在非严格模式指向全局对象 window,在严格模式指向 undefined:
4.1 全局环境中
在全局代码中,箭头函数被设置为全局对象:
4.2 this 捕获上下文
箭头函数没有自己的 this,而是使用箭头函数所在的作用域的 this,即指向箭头函数定义时(而不是运行时)所在的作用域。
4.2 this 捕获上下文
箭头函数没有自己的 this,而是使用箭头函数所在的作用域的 this,即指向箭头函数定义时(而不是运行时)所在的作用域。
在 setTimeout 中的 this 指向了构造函数新生成的对象,而普通函数指向了全局 window 对象。
4.3 箭头函数作为对象的方法使用
箭头函数作为对象的方法使用,指向全局 window 对象;而普通函数作为对象的方法使用,则指向调用的对象。
4.4 箭头函数中,call()、apply()、bind()方法无效
4.5 this 指向固定化
箭头函数可以让 this 指向固定化,这种特性很有利于封装回调函数
上面代码的 init 方法中,使用了箭头函数,这导致这个箭头函数里面的 this,总是指向 handler 对象。如果不使用箭头函数则指向全局 document 对象。
4.6 箭头函是不适用场景
(1)箭头函数不适合定义对象的方法(方法内有 this),因为此时指向 window;
(2)需要动态 this 的时候,也不应使用箭头函数。
参与互动
这个应该设计到同源策略的问题下面是我官员这个的笔记,虽然帮不到什么,但可以看看脚本不能读取从不同服务器(严格来讲,这些服务器来自不同的域、端口和协议)载入的文档的内容,除非这个就是包含脚本的文档。这一限制就叫同源策略。该策略是对javascript代码能够操作那些Web内容的一些完整的安全限制。当Web页面使用多个<iframe>元素或者打开其他浏览器窗口的时候,这一策略通常就会发挥作用。这种情况下,同源策略负责管理窗口或窗体中javascript代码以及和其他窗口或帧的交互。具体的说,脚本只能读取和所属文档来源相同的窗口和文档的属性。文档的来源包含协议、主机,以及载入文档的URL端口。脚本本身的来源和同源策略并不相关,相关的是脚本所嵌入的文档的来源。同源策略给那些使用多个子域的大站点带来了一些问题。解决办法:可以使用Document对象的domain属性。属性domain存放的是载入文档服务器的主机名。可以设置这个属性名,不过字符串必须具有有效的域前缀或它本身,如baidu.com,domain值中必须有一个点号,不能把它设置为com或其他顶级域名。两个窗口(或窗体)包含的脚本把domain设置成了相同的值,那么这两个窗口就不在受同源策略的约束,他们可以相互读取对象的属性。第二项技术已经标准转化为:跨域资源共享。这个标准草案用新的’Origin:‘请求头和新的Access-Control-Allow-Origin响应头来扩展HTTP。它允许服务器用头信息显示地列出源,或使用通配符来匹配所有的源并允许由任何地址请求文件第三种技术,叫做跨文档消息,允许来自一个文档的脚本可以传递文本消息到另一个文档里的脚本,而不管脚本的来源是否相同。调用Window对象上的postMessage()方法,可以异步传递消息事件(可以用onmessage事件句处理程序函数来处理它)到窗口的文档里。一个文档里的脚本还是不能调用在其他文档里的方法和读取属性,但他们可以用这种消息传递技术来实现安全的通信。
一、ASP.Net与Javascript .Net是微软公司下一代的战略核心,ASP.Net是.Net战略在Web开发方面的具体实现。它继承了ASP的简单性和易用性,同时克服了ASP程序结构化较差,难于阅读和理解的缺点。特别是服务器端控件和事件驱动模式的引入,使得Web应用程序的开发更接近于过去桌面程序的开发。 在各种各样介绍ASP.Net的文章和书籍中,都把重点放在了服务器控件和.Net Framework SDK上,因为这是ASP.Net中最新和最具革命性的改进;与此相反,在过去的Web开发中占据重要地位的客户端脚本Javascript(也包括VBScript)则鲜有提及,似乎有了服务器端程序,已经不需要客户端脚本了。但是,服务器端的程序毕竟需要一次浏览器与Web服务器的交互,对于ASP.Net来说,就是一次页面的提交,需要来回传送大量的数据,而很多工作,比如输入验证或者删除确认等,完全可以用Javascript来实现。因此,探讨在ASP.Net中如何使用Javascript仍然很有必要。 二、Javascript的应用示例 1.为页面上的某个服务器控件添加Javascript事件 服务器控件最终生成的仍然是普通的HTML,比如asp:textbox生成input text。表单中的每个HTML控件都有它自己的Javascript事件,比如Textbox有onchange事件,Button有onclick事件,Listbox有onchange事件等。要想为服务器控件添加客户端的事件,需要用到Attributes属性。Attributes属性是所有的服务器控件都有的一个属性,它用来为最终生成的HTML添加自定义的一些标记。假设Web Form上有一个保存按钮btnSave,希望在用户点此按钮时提示用户是否确实要保存(比如一旦保存就无法恢复等),则应在Page_Load事件中添加如下代码: if not page.isPostBack() then btnSave.Attributes.Add(“onclick”,”Javascript:return confirm(‘Are you sure to save?’);”) end if 要注意的是‘return’,这是不可省的,否则即使用户点了取消,数据仍然会保存。 2.为Datagrid中的每一行添加Javascript事件 假设Datagrid的每一行有一个删除按钮,希望在用户点此按钮时提示用户是否确实要删除此条记录,以防用户点错了行,或仅仅是无意中点了删除按钮。 无论这个删除按钮是什么名字,都不能象上个例子那样直接引用,因为每一行都有这样一个按钮,它们是Datagrid中的子控件。在这种情况下,需要用到Datagrid的OnItemDataBound事件。OnItemDataBound事件发生在Datagrid的每一行数据绑定到Datagrid之后(即一行激发一次)。首先在Datagrid的声明中添加如下代码: asp:datagrid id=grd1 runat=server OnItemDataBound = ItemDataBound …Columns definition here /asp:datagrid 此处说明OnItemDataBound事件发生时调用ItemDataBound方法,在代码后置文件中添加此方法的定义: Sub ItemDataBound(ByVal sender As Object, ByVal e As DataGridItemEventArgs) If e.Item.ItemType ListItemType.Header And e.Item.ItemType ListItemType.Footer Then Dim oDeleteButton As LinkButton = e.Item.Cells(5).Controls(0) oDeleteButton.Attributes(onclick) = javascript:return Confirm (Are you sure you want to delete DataBinder.Eval(e.Item.DataItem, m_sName) ?) End If End Sub 由于Datagrid的标题行和脚注行也会激发此事件,所以首先判断激发此事件的行不是标题行和脚注行。这里假设Delete按钮位于Datagrid的第6列(第一列是0),且Datagrid的Datasource中包含名为”m_sName”的列 3.引用编辑状态下的Datagrid中的控件 Datagrid的内置编辑功能使得当记录的字段较少时的一种编辑方法。用户不必进入一个单独的页面编辑记录,而是直接点编辑按钮就可以使当前行进入编辑模式。而另一方面,有一些Javascript程序需要引用控件的名称。比如,很多程序在需要用户输入日期时都提供一个日期控件以保证日期格式的合法性,当用户点控件图标时弹出一个新窗口供用户选择日期。此时需要把显示日期的文本框的ID提供给新窗口,以便当用户选择日期后值可以回填到文本框中。 如果是普通的服务器文本框控件,它的ID与生成的HTML输入框的ID是相同的;但是在Datagrid的编辑状态下,两个ID并不相同(其道理与上例相同),这就需要用到控件的ClientID属性。 Protected Sub ItemEdit(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Dim sDateCtrl as string sDateCtrl = grd1. Items (e.Item.ItemIndex) . Cells(2). FindControl(txtDate) . ClientID End Sub 这里假设ItemEdit方法是Dategrid的OnItemEdit事件处理程序,同时在Datagrid的第三列包含一个名为txtDate的服务器文本框控件。 4.引用ASP.Net自动生成的Javascript程序 所谓的“服务器端控件”是针对开发人员的,在生成的HTML源程序中并没有服务器和客户端之分,都是标准的HTML,DHTML和Javascript。它之所以能响应用户的输入是因为每个控件的事件处理程序最终都生成了一段脚本,此脚本重新提交页面使得Web Server有机会再次响应并作出处理。通常情况下我们不必知道此脚本是什么也不必直接调用此脚本,但在有些情况下,适当地调用此脚本可以简化许多工作。
1.什么是JavaScript?
JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。通俗的讲JavaScript通常用来做网页的交互以及同动态效果。它是一种非常流行的脚本语言,是一种运行在浏览器中的解释型编程语言。
2.同源的定义:
如果两个页面的协议/端口和主机都相同,那么这两个页面具有相同的源。我们也可以把它称为“协议/主机/端口 tuple”,或简单地叫做“tuple". ("tuple" ,“元”,“元组”是指一些事物组合在一起形成一个整体,比如(1,2)叫二元,(1,2,3)叫三元)。下表给出了相对同源检测的示例:
(只是路径不同而已,同源。)
(只是路径不同,同源)
(协议不同,http≠https,不同源)
(端口不同,http://80是默认值,不同源)
(域名不同,news/store,不同源)
3.JavaScript可以对文本web文档内容进行操作,对文档随意操作是互联网世界大忌,因此要对其进行限制。针对代码可以限定对哪些特定的web文本进行操作,这就叫同源策略。
同源策略的含义:脚本只能读取和所属文档来源相同的窗口和文档的属性。
以上就是JavaScript同源策略的大致概念,若要深究同源的验证过程以及原理,可以自行系统完整的学习此概念,对自己大有裨益。