成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Zepto源碼分析(二)奇淫技巧總結(jié)

ygyooo / 1918人閱讀

摘要:三目運(yùn)算符寫法如果是結(jié)構(gòu),會這樣寫。參數(shù)重載個(gè)數(shù)重載當(dāng)?shù)诙€(gè)參數(shù)下標(biāo)是在中,則返回,否則返回。三目運(yùn)算符寫法我們再來看看的版本參數(shù)重載類型重載通過來判斷是否存在第二個(gè)參數(shù),以及通過判斷參數(shù)的類型執(zhí)行不同的內(nèi)容。寫法操作中包含部分黑科技。

Zepto源碼分析(一)核心代碼分析
Zepto源碼分析(二)奇淫技巧總結(jié)

目錄
* 前言
    * 短路操作符
    * 參數(shù)重載(參數(shù)個(gè)數(shù)重載)
    * 參數(shù)重載(參數(shù)類型重載)
* CSS操作
    * 獲取屬性值的方法
    * 獲取屬性值的方法
* Boolean操作
    * 快速轉(zhuǎn)換成Boolean
* 日期操作
    * 快速獲取時(shí)間戳
* 數(shù)組操作
    * 數(shù)組去重
    * 數(shù)組清洗(去除null和undefined)
* 字符串操作
    * 快速轉(zhuǎn)換成字符串
    * CSS命名方式轉(zhuǎn)駝峰命名方式
    * 駝峰轉(zhuǎn)CSS命名方式
* 對象操作
    * 在閉包中修改引用會修改原對象
    * 對象中的this指向當(dāng)前的上一個(gè)位置
* 判斷
    * 瀏覽器類型判斷
前言

在Zepto源碼中大量使用了三目運(yùn)算符、短路操作符以及參數(shù)重載。要去完整的閱讀Zepto源碼,理解這幾種操作很有必要。

短路操作符

當(dāng)state為"ready"的時(shí)候,把"ok"返回給start。否則返回false給start。

var state = "ready"
var start = state === "ready" && "ok"  // "ok"

三目運(yùn)算符寫法

var state = "ready"
var start = state === "ready" ? "ok" : false  // "ok"

如果是if...else...結(jié)構(gòu),會這樣寫。

var state = "ready"
var start = ""
if (state === "ready")  start === "ok"  // "ok"
參數(shù)重載(個(gè)數(shù)重載)

當(dāng)?shù)诙€(gè)參數(shù)(下標(biāo)是1)在arguments中,則返回"two params",否則返回"one params"。

var paramsFun = function(a, b) {
  return (1 in arguments && "two params") || "one params"
}

paramsFun(2, 4)  // "two params"
paramsFun(2)  // "one params"

三目運(yùn)算符寫法

var paramsFun = function(a, b) {
  return 1 in arguments ? "two params" : "one params"
}

paramsFun(2, 4)  // "two params"
paramsFun(2)  // "one params"

我們再來看看if...else的版本

var paramsFun = function(a, b) {
  if(1 in arguments) return "two params"
  else return "one params"
}

paramsFun(2, 4)  // "two params"
paramsFun(2)  // "one params"
參數(shù)重載(類型重載)

通過1 in arguments來判斷是否存在第二個(gè)參數(shù),以及通過判斷參數(shù)的類型執(zhí)行不同的內(nèi)容。

var paramsFun = function(a, b) {
  return (1 in arguments && (typeof a ==="string" ? "two / a is string" : "two / a is not string")) || "one params"
}

paramsFun(2, 4)  // "two / a is not string"
paramsFun("", 4)  // "two / a is string"

if...else寫法

var paramsFun = function(a, b) {
  if(1 in arguments) {
    if(typeof a ==="string") return "two / a is string"
    return "two / a is not string"
  }
  return "one params"
}

paramsFun(2, 4)  // "two / a is not string"
paramsFun("", 4)  // "two / a is string"
CSS操作

Zepto中包含部分CSS黑科技。

獲取屬性值的方法

非內(nèi)聯(lián)CSS我們沒法獲取到值的,這是可以使用getComputedStyle來獲取計(jì)算后的樣式。

document.body.style.display  // ""
getComputedStyle(document.body, "").getPropertyValue("display")  // "block"
添加Style的方法
element = document.createElement("P")
element.style.cssText += ";color:red;"
element.style.color  // "red"
Boolean操作 快速轉(zhuǎn)換成Boolean

使用!!操作可以快速將數(shù)據(jù)類型轉(zhuǎn)為布爾值。

!!null  // false
Boolean(null)  // false
日期操作 快速獲取時(shí)間戳

使用+new Date()可以快速將日期轉(zhuǎn)為時(shí)間戳

var now = new Date();
console.log(+now)  // 1502506825489
console.log(now.getTime())  // 1502506825489
數(shù)組操作 數(shù)組去重
var uniq = function(array){ return [].filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
uniq([1,2,3,3])  // (3) [1, 2, 3]
數(shù)組清洗(去除null和undefined和空字符串)
function compact(array) { return [].filter.call(array, function(item){ return item != null && item != "" }) }
compact([1,2,3,3,undefined,null,""])  // [1, 2, 3, 3]
字符串操作 快速轉(zhuǎn)換成字符串
var x = 555
console.log("" + x)  // "555"
CSS命名方式轉(zhuǎn)駝峰命名方式
var camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : "" }) }
camelize("font-size")  // "fontSize"
駝峰轉(zhuǎn)CSS命名方式
function dasherize(str) {
  return str.replace(/::/g, "/")
         .replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2")
         .replace(/([a-zd])([A-Z])/g, "$1_$2")
         .replace(/_/g, "-")
         .toLowerCase()
}
dasherize("fontSize")  // "font-size"
對象操作 在閉包中修改引用會修改原對象

對象是引用類型,實(shí)際上是修改的被引用的對象。

var x = {};

(function(y){
  y.test = 66
})(x)

console.log(x)  // {test: 66}
對象中的this指向當(dāng)前的上一個(gè)位置

這個(gè)表述可能不夠嚴(yán)謹(jǐn)。在這里是z屬性中的this指向了上一層的y,所以this輸出了y里面的對象。

var x = {}
x.y = {}

x.y.z = function(){
  console.log(this)
}

x.y.z()  // {z: ?}
判斷 瀏覽器類型判斷

用正則表達(dá)式匹配navigator.userAgent中的信息來判斷瀏覽器類型。

var ua = navigator.userAgent  // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36"
var platform = navigator.platform
var webkit = ua.match(/Web[kK]it[/]{0,1}([d.]+)/),
android = ua.match(/(Android);?[s/]+([d.]+)?/),
osx = !!ua.match(/(Macintosh; Intel /),
ipad = ua.match(/(iPad).*OSs([d_]+)/),
ipod = ua.match(/(iPod)(.*OSs([d_]+))?/),
iphone = !ipad && ua.match(/(iPhonesOS)s([d_]+)/),
webos = ua.match(/(webOS|hpwOS)[s/]([d.]+)/),
win = /Wind{2}|Windows/.test(platform),
wp = ua.match(/Windows Phone ([d.]+)/),
touchpad = webos && ua.match(/TouchPad/),
kindle = ua.match(/Kindle/([d.]+)/),
silk = ua.match(/Silk/([d._]+)/),
blackberry = ua.match(/(BlackBerry).*Version/([d.]+)/),
bb10 = ua.match(/(BB10).*Version/([d.]+)/),
rimtabletos = ua.match(/(RIMsTabletsOS)s([d.]+)/),
playbook = ua.match(/PlayBook/),
chrome = ua.match(/Chrome/([d.]+)/) || ua.match(/CriOS/([d.]+)/),
firefox = ua.match(/Firefox/([d.]+)/),
firefoxos = ua.match(/((?:Mobile|Tablet); rv:([d.]+)).*Firefox/[d.]+/),
ie = ua.match(/MSIEs([d.]+)/) || ua.match(/Trident/[d](?=[^?]+).*rv:([0-9.].)/),
webview = !chrome && ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/),
safari = webview || ua.match(/Version/([d.]+)([^S](Safari)|[^M]*(Mobile)[^S]*(Safari))/)

歡迎關(guān)注前端進(jìn)階指南微信公眾號:

另外我也創(chuàng)了一個(gè)對應(yīng)的QQ群:660112451,歡迎一起交流。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/84938.html

相關(guān)文章

  • Zepto源碼分析(一)核心代碼分析

    摘要:源碼分析一核心代碼分析源碼分析二奇淫技巧總結(jié)本文只分析核心的部分代碼,并且在這部分代碼有刪減,但是不影響代碼的正常運(yùn)行。當(dāng)長度為則不添加內(nèi)容,否則逐個(gè)將逐個(gè)到當(dāng)前實(shí)例新增直接返回一個(gè)新的構(gòu)造函數(shù)添加初始化方法。 Zepto源碼分析(一)核心代碼分析Zepto源碼分析(二)奇淫技巧總結(jié) 本文只分析核心的部分代碼,并且在這部分代碼有刪減,但是不影響代碼的正常運(yùn)行。 目錄 * 用閉包封裝Z...

    BicycleWarrior 評論0 收藏0
  • 2017-08-27 前端日報(bào)

    摘要:前端日報(bào)精選如何合理地設(shè)計(jì)的深入了解一個(gè)超快的引擎也稱全面了解作用域源碼分析二奇淫技巧總結(jié)整理下前端江湖面試對自己有益的題目。 2017-08-27 前端日報(bào) 精選 如何合理地設(shè)計(jì)Redux的State深入了解一個(gè)超快的 CSS 引擎: Quantum CSS (也稱?Stylo) ★ Mozilla Hacks全面了解JS作用域Zepto源碼分析(二)奇淫技巧總結(jié)整理下《前端江湖面試...

    itvincent 評論0 收藏0
  • JavaScript 系列--JavaScript一些奇淫技巧的實(shí)現(xiàn)方法()數(shù)字格式化;類數(shù)組轉(zhuǎn)數(shù)

    摘要:一前言之前寫了一篇文章系列一些奇淫技巧的實(shí)現(xiàn)方法一簡短的函數(shù),獲取時(shí)間戳介紹了函數(shù)和獲取時(shí)間戳的方法。,和對象的構(gòu)造函數(shù)是對象的屬性。缺點(diǎn)低版本,無法處理集合的轉(zhuǎn)數(shù)組。 一、前言 之前寫了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的實(shí)現(xiàn)方法(一)簡短的sleep函數(shù),獲取時(shí)間戳 https://www.mwcxs.top/page/74... 介紹了sle...

    Jrain 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<