여기에 링크 내용을 작성하세요1. JavaScript의 typeof는 어떤 데이터 유형을 반환하나요? 먼저 JavaScript 데이터 유형은 기본 유형과 참조 유형의 두 가지 범주로 구분됩니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.
기본 유형: null, 정의되지 않음, 숫자, 문자열, 부울
참조 유형: 개체, 기호(ES6)
(기본 유형과 참조 유형의 차이점은 내 블로그 게시물 중 하나를 참조하세요. Js 기본 구문, 변수, 데이터 유형)
그런 다음 typeof 연산자는 모든 기본 유형을 결정할 수 있습니다. typeof는 "숫자", "문자열", "부울", "객체", "기호", "함수", "정의되지 않음" 등 7가지 가능한 값을 반환합니다.
2. 다음 연산 결과를 적어주세요
alert(typeof null); //object alert(typeof undefined);//undefined alert(typeof NaN);//number alert(NaN == undefined);//false alert(NaN == NaN);//false var str = “123abc”; alert(typeof str++); alert(str);//string
3. Instanceof 연산자가 있는 이유는 무엇인가요?
typeof는 피연산자 앞에 배치되는 단항 연산이며 피연산자는 모든 유형이 될 수 있습니다. 참조되는 객체의 유형에 관계없이 "객체"를 반환하는 typeof 연산자를 사용할 때 참조 유형을 사용하여 값을 저장하면 문제가 발생합니다. Array 및 Null과 같은 특수 개체의 경우 typeof를 사용하면 항상 개체가 반환됩니다. 이것이 typeof의 제한 사항입니다.
instanceof는 변수가 객체,
의 인스턴스인지 여부를 확인하는 데 사용됩니다.
var a=새 배열()
경고(배열 인스턴스)는 true를 반환합니다.
동시에
경고(객체 인스턴스)도 true를 반환합니다.또 다른 예:
함수 테스트(){}; var a=새 테스트()
Alert(instanceof 테스트);는 true를 반환합니다
또한 더 중요한 점은 인스턴스가 상위 유형에 속하는지 확인하기 위해 상속 관계에 사용할 수 있다는 것입니다. 예를 들면 다음과 같습니다.
function Aoo(){} function Foo(){} Foo.prototype = new Aoo();//JavaScript 原型继承var foo = new Foo(); console.log(foo instanceof Foo)//true console.log(foo instanceof Aoo)//true위 코드는 단일 수준 상속 관계에서 상위 클래스를 결정합니다. 다중 수준 상속 관계에서는 인스턴스of 연산자도 적용 가능합니다.
console.log(Object instanceof Object);//true console.log(Function instanceof Function);//true console.log(Number instanceof Number);//false console.log(String instanceof String);//false console.log(Function instanceof Object);//true console.log(Foo instanceof Function);//true console.log(Foo instanceof Foo);//false위 코드를 읽고 또 헷갈리시나요? Object 및 Function 인스턴스 자체는 true와 같지만 다른 클래스의 인스턴스 자체는 true와 같지 않은 이유는 무엇입니까? 설명하는 방법? instanceof의 신비를 근본적으로 이해하려면 다음 두 가지 측면에서 시작해야 합니다.
1. 언어 사양에서 이 연산자를 정의하는 방법.
2. JavaScript 프로토타입 상속 메커니즘.
JavaScript 인스턴스of 연산자 코드:
function instance_of(L, R) {//L 表示左表达式,R 表示右表达式 var O = R.prototype;// 取 R 的显示原型 L = L.__proto__;// 取 L 的隐式原型 while (true) { if (L === null) return false; if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true return true; L = L.__proto__; } }instanceof의 복잡한 사용법은 다음 링크를 참조하세요.
JavaScript 인스턴스of 연산자에 대한 심층 분석
최소 3개의 강제 유형 변환 및 2개의 암시적 유형 예시. 변환?
자신의 블로그 게시물을 참조할 수 있습니다: JS 데이터 유형 변환5. JavaScript의 이벤트 흐름 모델이 무엇입니까?
이벤트 흐름은 페이지에서 이벤트가 수신되는 순서를 설명합니다. DOM 구조는 트리 구조입니다. 페이지의 요소가 이벤트를 트리거하면 이벤트는 최상위 창 개체에서 시작하여 경로의 상위 노드로 전파됩니다. 현재 노드의 이벤트가 이벤트 처리 함수에 바인딩된 경우 해당 함수가 실행됩니다. 이벤트가 대상 요소에 도달하고 바인딩 기능이 실행되면(바인딩이 있는 경우) 이벤트가 위쪽으로 전파됩니다. 창 요소와 경로의 상위 노드는 해당 이벤트를 트리거합니다이벤트 흐름에는 세 가지 단계가 포함됩니다.이벤트 캡처 단계이벤트 캡처 단계: 이벤트는 최상위 개체에 의해 트리거되기 시작한 다음 대상 요소까지 단계적으로 아래로 전파됩니다.대상 단계
<br/>이벤트 버블링 단계
대상 단계: 켜짐 이벤트에 바인딩된 요소
이벤트 버블링 단계: 이벤트는 먼저 특정 요소에 의해 수신된 다음 불특정 요소까지 단계적으로 전파됩니다.
창 개체는 무엇입니까?
1. 창 개체는 JS의 최상위 개체입니다. 다른 BOM 개체는 창 개체의 속성입니다.
3.4. 브라우저 자체 정보 6. 기록 객체, 브라우저 액세스 기록 정보;
내 블로그 게시물을 참조하세요: Ajax
참조 답변:
AJAX에 대한 간략한 설명: AJAX는 "Asynchronous Javascript And XML"(Asynchronous JavaScript and XML)을 의미하며 대화형 웹 애플리케이션을 만들기 위한 웹 개발 기술을 나타냅니다. AJAX를 사용하면 백그라운드에서 서버와 소량의 데이터를 교환하여 웹 페이지를 비동기적으로 업데이트할 수 있습니다. 이는 전체 페이지를 다시 로드하지 않고도 웹페이지의 일부를 업데이트할 수 있음을 의미합니다.
AJAX 기본 단계:
Ajax 개체 초기화
주소 연결, 데이터 준비
요청 보내기
데이터 수신(수신, 아직 완료되지 않음)
데이터 수신 완료
//Ajax 개체 초기화
var xhr = new XMLHttpRequest()
//주소 연결 및 데이터 준비
xhr.open("method", "address", 비동기 여부)
//데이터 수신 완료 시 발생하는 이벤트
xhr.onload =function(){}
//데이터 보내기
xhr.send();
8. HTTP 상태 메시지 200 302 304 403 404 500은 무엇을 의미합니까?
200: 요청이 성공했으며 요청에서 예상하는 응답 헤더 또는 데이터 본문이 이 응답과 함께 반환됩니다.
302: 요청한 리소스가 다른 URI의 요청에 일시적으로 응답했습니다. 이러한 리디렉션은 일시적이므로 클라이언트는 향후 요청을 원래 주소로 계속 보내야 합니다. 이 응답은 Cache-Control 또는 Expires에 지정된 경우에만 캐시할 수 있습니다.
304: 클라이언트가 조건부 GET 요청을 보내고 요청이 허용되었지만 문서의 내용이 변경되지 않은 경우(마지막 액세스 이후 또는 요청 조건에 따라) 서버는 이 상태 코드를 반환해야 합니다. 304 응답은 메시지 본문을 포함하면 안 되므로 항상 메시지 헤더 뒤의 첫 번째 빈 줄로 끝납니다.
403: 서버가 요청을 이해했지만 실행을 거부했습니다.
404: 요청이 실패했습니다. 요청한 리소스를 서버에서 찾을 수 없습니다.
500: 서버에서 요청을 완료할 수 없는 예상치 못한 상황이 발생했습니다. 일반적으로 이 문제는 서버측 소스 코드에 오류가 있을 때 발생합니다.
9. 동기식과 비동기식의 차이점은 무엇인가요?
우선, 동기식과 비동기식은 차단 및 비차단과 관련이 없습니다. 동기화 및 비동기화는 주로 작업이 완료된 후 처리하는 방법에 중점을 두거나 메시지 통신 메커니즘에 중점을 둡니다.
동기화와 비동기화는 요청한 당사자를 위한 것이라고 할 수 있는데, 요청한 당사자가 처리 결과를 알리기 위해 사용하는 방법입니다.
동기화의 경우 메시지 핸들러는 메시지가 트리거될 때까지 기다립니다.
비동기의 경우 트리거 메커니즘은 주로 요청자에 대해 차단 및 비차단을 메시지 핸들러에 알립니다.
비차단: 결과가 반환될 때까지 기다리지 않고 요청하면 후속 작업을 계속할 수 있습니다. 10. GET과 POST의 차이점, 언제 POST를 사용하나요?
POST: 일반적으로 서버에 데이터를 보내는 데 사용됩니다. 이론적으로 전송되는 데이터의 크기에는 제한이 없습니다. 브라우저는 주소를 캐시하고 기록하지만 우편으로 제출된 데이터는 기록하지 않습니다. post는 일반 텍스트, URL 인코딩 형식, 바이너리 형식의 문자열을 다양한 형식으로 보낼 수 있습니다.
다음 상황에서는 POST 요청을 사용하세요. 제출 요청(의미론과 유사, get은 요청을 의미하고 post는 제출을 의미함)개인 데이터(사용자 이름, 비밀번호) 보내기(브라우저 캐시 기록 특성 때문); 서버에 많은 양의 데이터(데이터 크기 제한의 차이)
11. AJAX의 한계?
1.
2. 보안 문제 AJAX는 서버와의 상호 작용 세부 정보를 노출합니다.
4. 교차 도메인 요청에는 특정 제한 사항이 있습니다. 해결책:
12. new 연산자는 정확히 무엇을 합니까?
2. 함수에서 this 객체를 실행합니다.
4. 객체를 반환합니다.
13. null과 정의되지 않은 것의 차이점은 무엇인가요?
null: null은 null 값을 의미하며 숫자 값으로 변환하면 0이 됩니다.
undefine은 "누락된 값"을 의미합니다. 즉, 여기에 값이 있어야 하지만 아직 정의되지 않았습니다.
개체에는 할당된 속성이 없으며 이 속성의 값은 정의되지 않습니다. 함수에서 값을 반환하지 않으면 기본적으로 정의되지 않은 값을 반환합니다.
자세한 내용은 내 블로그 게시물을 참조하세요. JS는 데이터 유형, null과 정의되지 않음의 차이를 결정합니까?14. 자바스크립트 프로토타입, 프로토타입 체인의 특징은 무엇인가요? 범위 체인?
作用域链的理解:
当执行一段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加载后会首先创建一个全局的作用域,然后每执行一个函数,会建立一个对应的作用域,从而形成了一条作用域链。每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是当前函数作用域。
作用域链的作用是用于解析标识符,当函数被创建时(不是执行),会将this、arguments、命名参数和该函数中的所有局部变量添加到该当前作用域中,当JavaScript需要查找变量X的时候(这个过程称为变量解析),它首先会从作用域链中的链尾也就是当前作用域进行查找是否有X属性,如果没有找到就顺着作用域链继续查找,直到查找到链头,也就是全局作用域链,仍未找到该变量的话,就认为这段代码的作用域链上不存在x变量,并抛出一个引用错误(ReferenceError)的异常。
JavaScript 原型: 每创建一个函数,函数上都有一个属性为 prototype,它的值是一个对象。 这个对象的作用在于当使用函数创建实例的时候,那么这些实例都会共享原型上的属性和方法。
原型链: 在 JavaScript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接(proto)。这个原型对象又有自己的原型,直到某个对象的原型为 null 为止(也就是不再有原型指向)。这种一级一级的链结构就称为原型链(prototype chain)。 当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止;到查找到达原型链的顶部(Object.prototype),仍然没有找到指定的属性,就会返回 undefined。
十五、JavaScript代理
当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委托给父节点来触发处理函数。
比如我们需要向一个ul中动态添加很多个li,需要遍历li逐个添加点击事件
<ul id='list'></ul> var count = 100; var ulList = document.getElementById("list"); //动态构建节点 for(var i = count;i--;){ var liDom = document.createElement('li'); ulList.appendChild(liDom); } //绑定点击事件 var liNode = ulList.getElementByTagName("li"); for(var i=0, l = liNodes.length; i < l; i++){ liNode[i].onClick = function(){ //li点击事件 } }
众所周知,DOM操作是十分消耗性能的。所以重复的事件绑定简直是性能杀手。而事件代理的核心思想,就是通过尽量少的绑定,去监听尽量多的事件。如何做呢?答案是利用事件冒泡机制,对其父节点ul进行事件绑定(Event Bubble),然后通过event.target来判断是哪个节点触发的事件,从而减少很多EventHandler的绑定。
“` var count = 100; var ulList = document.getElementById(“list”); //动态构建节点 for(var i = count;i–;){ var liDom = document.createElement(‘li’); ulList.appendChild(liDom); } //绑定点击事件 var liNode = ulList.getElementByTagName(“li”); liNode.onClick = function(e){ if(e.target && e.target.nodeName.toUpperCase == “LI”) { // li点击事件 } }
十六、如何理解闭包?
闭包
十七、call和apply的作用是什么?区别是什么?
call和apply的功能基本相同,都是实现继承或者转换对象指针的作用;
唯一不通的是前者参数是罗列出来的,后者是存到数组中的;
call或apply功能就是实现继承的;与面向对象的继承extends功能相似;但写法不同;
语法:
.call(对象[,参数1,参数2,….]);//此地参数是指的是对象的参数,非方法的参数;
.apply(对象,参数数组)//参数数组的形式:[参数1,参数2,……]
十八、JavaScript 如何实现继承?
(1)构造继承 (2)原型继承 (3)实例继承 (4)拷贝继承
//原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。 function Parent()
{
this.name = ‘song’; } function Child() {
this.age = 28; } Child.prototype = new Parent(); //通过原型,继承了Parent var demo = new Child(); alert(demo.age); alert(demo.name); //得到被继承的属性
十九、JavaScript 有哪几种创建对象的方式?
JavaScript에서 객체를 생성한다는 것은 단순히 내장 객체나 다양한 사용자 정의 객체를 사용하는 것을 의미합니다. 물론 JSON을 사용할 수도 있지만 이를 작성하는 방법은 다양하며 혼합할 수도 있습니다. //
(1) 객체 리터럴 방식
person={이름:”마크”,성:”윤”,나이:25,눈색상:”검은색”}; (2) 함수를 사용하여 매개변수 없는 생성자 function Person(){} var person = new Person()
//함수를 정의합니다. 새로운 "인스턴스화"를 사용하면 해당 함수는 클래스로 간주될 수 있습니다. person.name =
"샤오송"; person.age = "23"; person.work = function() {
Alert(“Hello” + person.name); } person.work() (3) 함수를 사용하여 매개변수 생성자를 시뮬레이션합니다(this 키워드를 사용하여 구문의 컨텍스트 속성을 정의합니다). 사람(이름,나이,취미) {
This.name = name; //이 범위: 현재 객체
이.나이 = 나이
이.일 = 일
This.info = function() {
Alert("내 이름" + this.name + "올해" + this.age + "세" + this.work); } } var Xiaosong = new Person("WooKong",23,"Programmer"); //객체 인스턴스화 및 생성 Xiaosong.info() //팩토리 메서드를 사용하여 info() 메서드(4)를 호출합니다. (내장 객체) var jsCreater = new
Object(); jsCreater.name = "Brendan Eich"
jsCreater.work = “자바스크립트” jsCreater.info = function() {
Alert("저는 "+this.work+""+this.name의 발명자입니다. } jsCreater.info(); (5) 프로토타입 메서드를 사용하여 함수 Standard()를 생성합니다.{} Standard.prototype.name =
"ECMAScript"; Standard.prototype.event = function() {
Alert(this.name+"는 스크립팅 언어 표준 사양입니다.") } var jiaoben = new Standard() (6) 혼합 방법을 사용하여 iPhone(name,event); This.name = 이름; This.event = 이벤트; } iPhone.prototype.sell = function() {
Alert("저는 "+this.name+"입니다. 저는 iPhone5s입니다. "+this.event+"~ 하하!") } var SE = new iPhone("iPhone SE","공식 리퍼브 기계"); );
20.JavaScript에는 객체 검색 시 절대로 프로토타입을 검색하지 않는 함수가 있습니다.
hasOwnProperty // JavaScript의 hasOwnProperty 함수 메서드는 객체에 지정된 이름의 속성이 있는지 여부를 나타내는 부울 값을 반환합니다. 이 메서드는 속성이 객체의 프로토타입 체인에 있는지 여부를 확인할 수 없습니다. 속성은 객체 자체의 멤버여야 합니다. //
사용법: object.hasOwnProperty(proName) 여기서 매개변수 object는 필수 옵션인 개체의 인스턴스입니다. proName은 필수이며 속성 이름의 문자열 값입니다.// 객체에 지정된 이름의 속성이 있는 경우 JavaScript의 hasOwnProperty 함수 메서드는 true를 반환하고, 그렇지 않으면를 반환합니다. 거짓.
21.Ajax란 무엇인가요? Ajax를 만드는 방법은 무엇입니까?
ajax의 전체 이름: 비동기 Javascript 및 XML, 비동기 전송 + js + xml. 소위 비동기식이라는 간단한 설명은 다음과 같습니다. 서버에 요청을 보낼 때 결과를 기다릴 필요가 없지만 동시에 다른 작업을 수행할 수 있습니다. 결과가 사용 가능하면 후속 작업을 수행합니다. 동시에 설정에 따라 페이지 전체 페이지 새로 고침이 발생하지 않아 사용자 경험이 향상됩니다. (1) XMLHttpRequest 객체 생성, 즉 비동기 호출 객체 생성
(2) 새로운 HTTP 요청을 생성하고 HTTP 요청의 방법, URL 및 확인 정보를 지정합니다(3) HTTP 요청 상태 변경에 응답하는 기능 설정(4) 비동기 호출로 반환된 데이터 가져오기
(5)JavaScript와 DOM을 사용하여 부분 새로 고침 구현
위 내용은 js에서 인터뷰 지식 포인트 정리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!