최근 모바일 단말 작업을 하고 있는데 jQuery에 익숙하고 Zepto는 jQuery와 동일한 API를 제공하기 때문에 개발 프레임워크로 Zepto를 선택했습니다.
모바일 개발이므로 forEach와 같은 일부 새로운 ES5 API도 사용됩니다. 다음은 제가 작성한 코드의 몇 가지 예입니다.
list.forEach(function(v) { return !!v; })
저는 순진하게도 forEach가 jQuery의 Each와 같다고 생각했습니다. 반환 값이 false인 한 루프가 중단될 것이기 때문에 이와 같은 순회 코드를 많이 작성했습니다. 각 순회) 변수를 선언하세요)
한동안 글을 쓰다 갑자기 forEach의 콜백 함수가 루프를 중단할 수 없다는 사실을 발견하여 Array.prototype에 함수를 걸고 All을 교체했습니다. 완벽합니다.
Array.prototype.foreach = function(fn) { var i = 0, len = this.length; for (; i < len; ++i) { if (fn(this[i], i) === false) { break; } } };
언젠가는 클라이언트가 저장해야 하는 json이 너무 크다는 점을 고려하면(장담하지 않지만 최대값은 20M일 수 있음) 최적화를 수행하고 싶었습니다. stringify는 시간이 너무 많이 걸리고 UI이므로 다음과 비슷하게 Worker를 사용하여 특별히 이 json을 문자열화하기 위해 백그라운드에서 스레드를 엽니다.
addEventListener("메시지", function(e) {
var 데이터 = e.data;
데이터 = JSON.stringify(데이터);
postMessage(데이터);
}, 거짓);
pos메시지:
작업자.포스트메시지(데이터)
그러나 콘솔에서는 다음과 같은 오류 메시지가 출력됩니다.
포착되지 않은 DataCloneError: 'Worker'에서 'postMessage' 실행 실패: 객체를 복제할 수 없습니다.
대체 왜 json을 복사할 수 없는 걸까요? 그래서 이유를 찾기 시작했고 내 json에서 다음을 발견했습니다.
맙소사, 이게 대체 왜 들어왔지? 편집기에서 $.extend(true, {}, obj)를 봤는데 거기에서 놀라지 않을 수 없었습니다. , 당신이 문제를 일으키고 있을 리가 없습니다. 그래서 $.extend 소스코드를 확인해봤습니다.
function extend(target, source, deep) { for (key in source) if (deep && (isPlainObject(source[key]) || isArray(source[key]))) { if (isPlainObject(source[key]) && !isPlainObject(target[key])) target[key] = {} if (isArray(source[key]) && !isArray(target[key])) target[key] = [] extend(target[key], source[key], deep) } else if (source[key] !== undefined) target[key] = source[key] } // Copy all but undefined properties from one or more // objects to the `target` object. $.extend = function(target){ var deep, args = slice.call(arguments, 1) if (typeof target == 'boolean') { deep = target target = args.shift() } args.forEach(function(arg){ extend(target, arg, deep) }) return target }
맙소사, 이 사람이 정말 문제를 일으키고 있습니다. 배열을 순회하기 위해 for...in...을 사용하는 것은 괜찮지만 그렇지 않으면 (source[key] !== undefine) target[key] = source입니다. [ key] 여기의 조건이 더 심각할 수 있습니까? 확인하기 위해 hasOwnProperty를 추가하면 많은 시간이 낭비되지 않습니다. 눈물이 흘러내리네요
Zepto에게 속은 후 즉시 jQuery로 가서 불만을 토로했습니다. 그것이 나를 위로할 수 있기를 바랐지만 예기치 않게:
jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; };
이 사람은 else if ( copy !== undefine ) {target[ name ] = copy;} 말씀해주세요, 사랑하는 어머니.
결국엔 제가 직접 쓸 수밖에 없었습니다.
요약: $.extend를 사용하려는 경우 Array.prototype 및 Object.prototype에 사용자 정의 속성과 메서드를 쉽게 추가하지 마세요. 그렇지 않으면 나중에 버그를 찾아야 할 수도 있습니다.
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
