JS = Jian Shang,奸商,現(xiàn)在國內(nèi)JS基本分為三種:
創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目網(wǎng)站設計制作、網(wǎng)站設計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元驛城做網(wǎng)站,已為上家服務,為驛城各地企業(yè)和個人服務,聯(lián)系電話:13518219792
1.瞎要價,能蒙一個算一個的。(能用垃圾蒙的堅決用垃圾蒙)
2.直接用垃圾坑人的,價格只有更低,沒有最低的(不排除用垃圾賣高價賺黑心錢的)、
3、瞎要價,信誓旦旦鐵保絕對的好機,然后就獅子大開口。(遇到行情不懂的,或者似懂非懂的基本可以忽悠了)。
不排除,第三種類型的商家走的是良商的路線,固然很好?,F(xiàn)在大部分論壇的商家基本都在樹立自己的良好形象,說明商家基本發(fā)現(xiàn)做JS的路現(xiàn)在太難走了,錢越來越難賺了不說,還壞了自己的名聲。 所以不如說這是JS們在戰(zhàn)略上的轉型,同樣是為了達到謀取暴力,打出各種噱頭來忽悠大眾。我調(diào)查過黑莓同樣功能,檔次的機型(山寨機除外)黑莓的報價是出奇的高。曾今我看中過黑莓的一款機型,然后對比了一款功能差不多諾記行貨。(注:黑莓的水貨價和諾記的行貨價進行的比較)結果黑莓價格是相當?shù)母撸』旧瞎δ懿畈欢嗟漠a(chǎn)品價格上不會太大誤差,除非是什么奢華的定制機,或限量版。低端BB的價格現(xiàn)在已盡很透明了,所以現(xiàn)在JS基本看好高端BB。
在此提醒廣大BBER,買BB的時候多多的進行同等配置的不同商品的對比,不要讓奸商在價格上忽悠了,他就是再好的貨,能值多少錢,自己先掂量下,調(diào)查清楚了再買。不要聽他打著質量鐵保的旗號,在價格上把你坑了,除非你認為錢無所謂,只要質量好就行。
71.IE 和標準下有哪些兼容性的寫法
參考答案:
參與互動
72.變量提升
參考答案:
A、js 代碼執(zhí)行的過程
B、變量提升發(fā)生的環(huán)境:發(fā)生在代碼所處的當前作用域。
解析:
對應面試題
參與互動
73.如何阻止冒泡與默認行為
參考答案:
解析:
當需要阻止冒泡行為時,可以使用
當需要阻止默認行為時,可以使用
參與互動
74.js 中 this 閉包 作用域
參考答案:
this:指向調(diào)用上下文
閉包:定義一個函數(shù)就開辟了一個局部作用域,整個 js 執(zhí)行環(huán)境有一個全局作用域
作用域:一個函數(shù)可以訪問其他函數(shù)中的變量(閉包是一個受保護的變量空間)
參與互動
75.javascript 的本地對象,內(nèi)置對象和宿主對象
參考答案:
1.本地對象
ECMA-262 把本地對象(native object)定義為“獨立于宿主環(huán)境的 ECMAScript 實現(xiàn)提供的對象"。簡單來說,本地對象就是 ECMA-262 定義的類(引用類型)。它們包括:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError
2.內(nèi)置對象
JS中內(nèi)置了17個對象,常用的是Array對象、Date對象、正則表達式對象、string對象、Global對象
3.宿主對象
由ECMAScript實現(xiàn)的宿主環(huán)境提供的對象,可以理解為:瀏覽器提供的對象。所有的BOM和DOM都是宿主對象。
參與互動
76.javascript 的同源策略
參考答案:一段腳本只能讀取來自于同一來源的窗口和文檔的屬性
解析:
同源策略:限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的關鍵的安全機制。(來自 MDN 官方的解釋)
簡單來說就是:一段腳本只能讀取來自于同一來源的窗口和文檔的屬性,這里的同一來源指的是主機名、協(xié)議和端口號的組合 具體解釋:
(1)源包括三個部分:協(xié)議、域名、端口(http 協(xié)議的默認端口是 80)。如果有任何一個部分不同,則源不同,那就是跨域了。
(2)限制:這個源的文檔沒有權利去操作另一個源的文檔。這個限制體現(xiàn)在:(要記?。?/p>
Cookie、LocalStorage 和 IndexDB 無法獲取。
無法獲取和操作 DOM。
不能發(fā)送 Ajax 請求。我們要注意,Ajax 只適合同源的通信。
同源策略帶來的麻煩:ajax 在不同域名下的請求無法實現(xiàn),需要進行跨域操作
參與互動
77.事件冒泡與事件捕獲
參考答案:
事件冒泡:由最具體的元素(目標元素)向外傳播到最不具體的元素
事件捕獲:由最不確定的元素到目標元素
參與互動
78.foo = foo||bar ,這行代碼是什么意思?為什么要這樣寫?
參考答案:
這種寫法稱為短路表達式
解析:
相當于
常用于函數(shù)參數(shù)的空判斷
參與互動
79.復雜數(shù)據(jù)類型如何轉變?yōu)樽址?/p>
參考答案:
參與互動
80.javascript 中 this 的指向問題
參考答案:
解析:
全局環(huán)境下,this 始終指向全局對象(window),無論是否嚴格模式;
2.1 普通函數(shù)
普通函數(shù)內(nèi)部的 this 分兩種情況,嚴格模式和非嚴格模式。
(1)非嚴格模式下,沒有被上一級的對象所調(diào)用, this 默認指向全局對象 window。
(2)嚴格模式下,this 指向 undefined。
2.2 函數(shù)作為對象的方法
(1)函數(shù)有被上一級的對象所調(diào)用,那么 this 指向的就是上一級的對象。
(2)多層嵌套的對象,內(nèi)部方法的 this 指向離被調(diào)用函數(shù)最近的對象(window 也是對象,其內(nèi)部對象調(diào)用方法的 this 指向內(nèi)部對象, 而非 window)。
特殊例子
2.3 原型鏈中的 this
(1)如果該方法存在于一個對象的原型鏈上,那么 this 指向的是調(diào)用這個方法的對象,就像該方法在對象上一樣。
上述例子中,對象 p 沒有屬于它自己的 f 屬性,它的 f 屬性繼承自它的原型。當執(zhí)行 p.f()時,會查找 p 的原型鏈,找到 f 函數(shù)并執(zhí)行。因為 f 是作為 p 的方法調(diào)用的,所以函數(shù)中的 this 指向 p。
(2)相同的概念也適用于當函數(shù)在一個 getter 或者 setter 中被調(diào)用。用作 getter 或 setter 的函數(shù)都會把 this 綁定到設置或獲取屬性的對象。
(3)call()和 apply()方法:當函數(shù)通過 Function 對象的原型中繼承的方法 call() 和 apply() 方法調(diào)用時, 其函數(shù)內(nèi)部的 this 值可綁定到 call() apply() 方法指定的第一個對象上, 如果第一個參數(shù)不是對象,JavaScript 內(nèi)部會嘗試將其轉換成對象然后指向它。
(4)bind()方法:由 ES5 引入, 在 Function 的原型鏈上, Function.prototype.bind。通過 bind 方法綁定后, 函數(shù)將被永遠綁定在其第一個參數(shù)對象上, 而無論其在什么情況下被調(diào)用。
2.4 構造函數(shù)中的 this
當一個函數(shù)用作構造函數(shù)時(使用 new 關鍵字),它的 this 被綁定到正在構造的新對象。
構造器返回的默認值是 this 所指的那個對象,也可以手動返回其他的對象。
特殊例子
當 this 碰到 return 時
2.5 setTimeout setInterval
(1)對于延時函數(shù)內(nèi)部的回調(diào)函數(shù)的 this 指向全局對象 window;
(2)可以通過 bind()方法改變內(nèi)部函數(shù) this 指向。
3.1 作為一個 DOM 事件處理函數(shù)
當函數(shù)被用作事件處理函數(shù)時,它的 this 指向觸發(fā)事件的元素(針對 addEventListener 事件)。
3.2 作為一個內(nèi)聯(lián)事件處理函數(shù)
(1)當代碼被內(nèi)聯(lián)處理函數(shù)調(diào)用時,它的 this 指向監(jiān)聽器所在的 DOM 元素;
(2)當代碼被包括在函數(shù)內(nèi)部執(zhí)行時,其 this 指向等同于 普通函數(shù)直接調(diào)用的情況,即在非嚴格模式指向全局對象 window,在嚴格模式指向 undefined:
4.1 全局環(huán)境中
在全局代碼中,箭頭函數(shù)被設置為全局對象:
4.2 this 捕獲上下文
箭頭函數(shù)沒有自己的 this,而是使用箭頭函數(shù)所在的作用域的 this,即指向箭頭函數(shù)定義時(而不是運行時)所在的作用域。
4.2 this 捕獲上下文
箭頭函數(shù)沒有自己的 this,而是使用箭頭函數(shù)所在的作用域的 this,即指向箭頭函數(shù)定義時(而不是運行時)所在的作用域。
在 setTimeout 中的 this 指向了構造函數(shù)新生成的對象,而普通函數(shù)指向了全局 window 對象。
4.3 箭頭函數(shù)作為對象的方法使用
箭頭函數(shù)作為對象的方法使用,指向全局 window 對象;而普通函數(shù)作為對象的方法使用,則指向調(diào)用的對象。
4.4 箭頭函數(shù)中,call()、apply()、bind()方法無效
4.5 this 指向固定化
箭頭函數(shù)可以讓 this 指向固定化,這種特性很有利于封裝回調(diào)函數(shù)
上面代碼的 init 方法中,使用了箭頭函數(shù),這導致這個箭頭函數(shù)里面的 this,總是指向 handler 對象。如果不使用箭頭函數(shù)則指向全局 document 對象。
4.6 箭頭函是不適用場景
(1)箭頭函數(shù)不適合定義對象的方法(方法內(nèi)有 this),因為此時指向 window;
(2)需要動態(tài) this 的時候,也不應使用箭頭函數(shù)。
參與互動
這個應該設計到同源策略的問題下面是我官員這個的筆記,雖然幫不到什么,但可以看看腳本不能讀取從不同服務器(嚴格來講,這些服務器來自不同的域、端口和協(xié)議)載入的文檔的內(nèi)容,除非這個就是包含腳本的文檔。這一限制就叫同源策略。該策略是對javascript代碼能夠操作那些Web內(nèi)容的一些完整的安全限制。當Web頁面使用多個<iframe>元素或者打開其他瀏覽器窗口的時候,這一策略通常就會發(fā)揮作用。這種情況下,同源策略負責管理窗口或窗體中javascript代碼以及和其他窗口或幀的交互。具體的說,腳本只能讀取和所屬文檔來源相同的窗口和文檔的屬性。文檔的來源包含協(xié)議、主機,以及載入文檔的URL端口。腳本本身的來源和同源策略并不相關,相關的是腳本所嵌入的文檔的來源。同源策略給那些使用多個子域的大站點帶來了一些問題。解決辦法:可以使用Document對象的domain屬性。屬性domain存放的是載入文檔服務器的主機名??梢栽O置這個屬性名,不過字符串必須具有有效的域前綴或它本身,如baidu.com,domain值中必須有一個點號,不能把它設置為com或其他頂級域名。兩個窗口(或窗體)包含的腳本把domain設置成了相同的值,那么這兩個窗口就不在受同源策略的約束,他們可以相互讀取對象的屬性。第二項技術已經(jīng)標準轉化為:跨域資源共享。這個標準草案用新的’Origin:‘請求頭和新的Access-Control-Allow-Origin響應頭來擴展HTTP。它允許服務器用頭信息顯示地列出源,或使用通配符來匹配所有的源并允許由任何地址請求文件第三種技術,叫做跨文檔消息,允許來自一個文檔的腳本可以傳遞文本消息到另一個文檔里的腳本,而不管腳本的來源是否相同。調(diào)用Window對象上的postMessage()方法,可以異步傳遞消息事件(可以用onmessage事件句處理程序函數(shù)來處理它)到窗口的文檔里。一個文檔里的腳本還是不能調(diào)用在其他文檔里的方法和讀取屬性,但他們可以用這種消息傳遞技術來實現(xiàn)安全的通信。
一、ASP.Net與Javascript .Net是微軟公司下一代的戰(zhàn)略核心,ASP.Net是.Net戰(zhàn)略在Web開發(fā)方面的具體實現(xiàn)。它繼承了ASP的簡單性和易用性,同時克服了ASP程序結構化較差,難于閱讀和理解的缺點。特別是服務器端控件和事件驅動模式的引入,使得Web應用程序的開發(fā)更接近于過去桌面程序的開發(fā)。 在各種各樣介紹ASP.Net的文章和書籍中,都把重點放在了服務器控件和.Net Framework SDK上,因為這是ASP.Net中最新和最具革命性的改進;與此相反,在過去的Web開發(fā)中占據(jù)重要地位的客戶端腳本Javascript(也包括VBScript)則鮮有提及,似乎有了服務器端程序,已經(jīng)不需要客戶端腳本了。但是,服務器端的程序畢竟需要一次瀏覽器與Web服務器的交互,對于ASP.Net來說,就是一次頁面的提交,需要來回傳送大量的數(shù)據(jù),而很多工作,比如輸入驗證或者刪除確認等,完全可以用Javascript來實現(xiàn)。因此,探討在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’,這是不可省的,否則即使用戶點了取消,數(shù)據(jù)仍然會保存。 2.為Datagrid中的每一行添加Javascript事件 假設Datagrid的每一行有一個刪除按鈕,希望在用戶點此按鈕時提示用戶是否確實要刪除此條記錄,以防用戶點錯了行,或僅僅是無意中點了刪除按鈕。 無論這個刪除按鈕是什么名字,都不能象上個例子那樣直接引用,因為每一行都有這樣一個按鈕,它們是Datagrid中的子控件。在這種情況下,需要用到Datagrid的OnItemDataBound事件。OnItemDataBound事件發(fā)生在Datagrid的每一行數(shù)據(jù)綁定到Datagrid之后(即一行激發(fā)一次)。首先在Datagrid的聲明中添加如下代碼: asp:datagrid id=grd1 runat=server OnItemDataBound = ItemDataBound …Columns definition here /asp:datagrid 此處說明OnItemDataBound事件發(fā)生時調(diào)用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的標題行和腳注行也會激發(fā)此事件,所以首先判斷激發(fā)此事件的行不是標題行和腳注行。這里假設Delete按鈕位于Datagrid的第6列(第一列是0),且Datagrid的Datasource中包含名為”m_sName”的列 3.引用編輯狀態(tài)下的Datagrid中的控件 Datagrid的內(nèi)置編輯功能使得當記錄的字段較少時的一種編輯方法。用戶不必進入一個單獨的頁面編輯記錄,而是直接點編輯按鈕就可以使當前行進入編輯模式。而另一方面,有一些Javascript程序需要引用控件的名稱。比如,很多程序在需要用戶輸入日期時都提供一個日期控件以保證日期格式的合法性,當用戶點控件圖標時彈出一個新窗口供用戶選擇日期。此時需要把顯示日期的文本框的ID提供給新窗口,以便當用戶選擇日期后值可以回填到文本框中。 如果是普通的服務器文本框控件,它的ID與生成的HTML輸入框的ID是相同的;但是在Datagrid的編輯狀態(tài)下,兩個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程序 所謂的“服務器端控件”是針對開發(fā)人員的,在生成的HTML源程序中并沒有服務器和客戶端之分,都是標準的HTML,DHTML和Javascript。它之所以能響應用戶的輸入是因為每個控件的事件處理程序最終都生成了一段腳本,此腳本重新提交頁面使得Web Server有機會再次響應并作出處理。通常情況下我們不必知道此腳本是什么也不必直接調(diào)用此腳本,但在有些情況下,適當?shù)卣{(diào)用此腳本可以簡化許多工作。
1.什么是JavaScript?
JavaScript是一種直譯式腳本語言,是一種動態(tài)類型、弱類型、基于原型的語言,內(nèi)置支持類型。通俗的講JavaScript通常用來做網(wǎng)頁的交互以及同動態(tài)效果。它是一種非常流行的腳本語言,是一種運行在瀏覽器中的解釋型編程語言。
2.同源的定義:
如果兩個頁面的協(xié)議/端口和主機都相同,那么這兩個頁面具有相同的源。我們也可以把它稱為“協(xié)議/主機/端口 tuple”,或簡單地叫做“tuple". ("tuple" ,“元”,“元組”是指一些事物組合在一起形成一個整體,比如(1,2)叫二元,(1,2,3)叫三元)。下表給出了相對同源檢測的示例:
(只是路徑不同而已,同源。)
(只是路徑不同,同源)
(協(xié)議不同,http≠https,不同源)
(端口不同,http://80是默認值,不同源)
(域名不同,news/store,不同源)
3.JavaScript可以對文本web文檔內(nèi)容進行操作,對文檔隨意操作是互聯(lián)網(wǎng)世界大忌,因此要對其進行限制。針對代碼可以限定對哪些特定的web文本進行操作,這就叫同源策略。
同源策略的含義:腳本只能讀取和所屬文檔來源相同的窗口和文檔的屬性。
以上就是JavaScript同源策略的大致概念,若要深究同源的驗證過程以及原理,可以自行系統(tǒng)完整的學習此概念,對自己大有裨益。