//Paul Tero, July 2001
//http://www.tero.co.uk/des/
//
//Optimised for performance with large blocks by Michael Hayworth, November 2001
//http://www.netdealing.com
//
//THIS SOFTWARE IS PROVIDED "AS IS" AND
//ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
//ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
//FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
//DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
//OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
//HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
//OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
//SUCH DAMAGE.
//des
//this takes the key, the message, and whether to encrypt or decrypt
function des (key, message, encrypt, mode, iv, padding) {
//declaring this locally speeds things up a bit
var spfunction1 = new Array (0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004);
var spfunction2 = new Array (-0x7fef7fe0,-0x7fff8000,0x8000,0x108020,0x100000,0x20,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,0x100000,0x20,-0x7fefffe0,0x108000,0x100020,-0x7fff7fe0,0,-0x80000000,0x8000,0x108020,-0x7ff00000,0x100020,-0x7fffffe0,0,0x108000,0x8020,-0x7fef8000,-0x7ff00000,0x8020,0,0x108020,-0x7fefffe0,0x100000,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,0x8000,-0x7ff00000,-0x7fff8000,0x20,-0x7fef7fe0,0x108020,0x20,0x8000,-0x80000000,0x8020,-0x7fef8000,0x100000,-0x7fffffe0,0x100020,-0x7fff7fe0,-0x7fffffe0,0x100020,0x108000,0,-0x7fff8000,0x8020,-0x80000000,-0x7fefffe0,-0x7fef7fe0,0x108000);
var spfunction3 = new Array (0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200);
var spfunction4 = new Array (0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080);
var spfunction5 = new Array (0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100);
var spfunction6 = new Array (0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010);
var spfunction7 = 새 어레이(0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000, 0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000, 0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802, 0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802, 0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x8 00,0x200002);
var spfunction8 = 새 배열(0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x 41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000 ,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1 000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000 ,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040, 0x1040,0x40040,0x10000000,0x10041000);
//필요한 16개 또는 48개의 하위 키를 생성합니다.
varkeys = des_createKeys(key);
var m=0, i, j, temp, temp2, right1, right2, 왼쪽, 오른쪽, 반복;
var cbcleft, cbcleft2, cbcright, cbcright2
var endloop, loopinc;
var len = message.length;
var 청크 = 0;
//단일 및 삼중 des에 대한 루프 설정
var iterations =keys.length == 32 ? 3:9; //단일 또는 삼중 des
if (반복 == 3) {looping = encrypt ? 새 배열(0, 32, 2) : 새 배열(30, -2, -2);}
else {looping = encrypt ? 새 배열(0, 32, 2, 62, 30, -2, 64, 96, 2) : 새 배열(94, 62, -2, 32, 64, 2, 30, -2, -2);}
//패딩 매개변수에 따라 메시지를 채웁니다.
if (padding == 2) message = " "; //메시지를 공백으로 채웁니다.
else if (padding == 1) {temp = 8-(len%8); message = String.fromCharCode(온도,온도,온도,온도,온도,온도,온도,온도); if (temp==8) len =8;} //PKCS7 패딩
else if (!padding) message = " "; //널 바이트로 메시지를 채웁니다.
//여기에 결과를 저장합니다.
result = "";
tempresult = "";
if (mode == 1) { //CBC 모드
cbcleft = (iv.charCodeAt(m ) cbcright = (iv.charCodeAt(m ) m=0;
}
//메시지의 각 64비트 청크를 반복합니다.
while (m left = (message.charCodeAt(m ) right = (message.charCodeAt(m )
//Cipher Block Chaining 모드의 경우 이전 결과와 메시지를 xor합니다.
if (mode == 1) {if (encrypt) {left ^= cbcleft; 오른쪽 ^= cbcright;} else {cbcleft2 = cbcleft; cbright2 = cbright; cbcleft = 왼쪽; cbright = 오른쪽;}}
//먼저 각 64개이지만 메시지 덩어리는 IP
temp = ((left >>> 4) ^ right) & 0x0f0f0f0f;에 따라 변경되어야 합니다. 오른쪽 ^= 온도; 왼쪽 ^= (온도 temp = ((왼쪽 >>> 16) ^ 오른쪽) & 0x0000ffff; 오른쪽 ^= 온도; 왼쪽 ^= (온도 temp = ((오른쪽 >>> 2) ^ 왼쪽) & 0x33333333; 왼쪽 ^= 온도; 오른쪽 ^= (온도 temp = ((오른쪽 >>> 8) ^ 왼쪽) & 0x00ff00ff; 왼쪽 ^= 온도; 오른쪽 ^= (온도 temp = ((왼쪽 >>> 1) ^ 오른쪽) & 0x55555555; 오른쪽 ^= 온도; 왼쪽 ^= (온도
left = ((왼쪽 >> 31));
right = ((오른쪽 >> 31));
//메시지의 각 청크에 대해 이 작업을 1~3회 수행합니다.
for (j=0; j
loopinc = 반복[j 2];
//이제 암호화 또는 복호화를 수행합니다.
for (i=looping[j]; i!=endloop; i =loopinc) { //효율성을 위해
right1 = right ^keys[i ];
right2 = ((오른쪽 >>> 4) | (오른쪽 //S 선택 함수를 통해 이 바이트를 전달하여 결과를 얻습니다.
temp = left;
왼쪽 = 오른쪽;
right = temp ^ (spfunction2[(right1 >>> 24) & 0x3f] | spfunction4[(right1 >>> 16) & 0x3f]
| spfunction6[(right1 >> ;> 8) & 0x3f] | spfunction8[right1 & 0x3f]
| spfunction1[(right2 >> 24) & 0x3f] | spfunction3[(right2 >> 16)
| spfunction5[(right2 >>> 8) & 0x3f] | spfunction7[right2 & 0x3f]);
}
온도 = 왼쪽; 왼쪽 = 오른쪽; 오른쪽 = 온도; //왼쪽과 오른쪽 반전
} //1회 또는 3회 반복
//한 비트씩 오른쪽으로 이동
left = ((왼쪽 >>> 1) |(왼쪽 right = ((오른쪽 >>> 1) | (오른쪽
//이제 반대 방향의 IP인 IP-1을 수행합니다.
temp = ((left >>> 1) ^ right) & 0x55555555; 오른쪽 ^= 온도; 왼쪽 ^= (온도 temp = ((오른쪽 >>> 8) ^ 왼쪽) & 0x00ff00ff; 왼쪽 ^= 온도; 오른쪽 ^= (온도 temp = ((오른쪽 >>> 2) ^ 왼쪽) & 0x33333333; 왼쪽 ^= 온도; 오른쪽 ^= (온도 temp = ((왼쪽 >>> 16) ^ 오른쪽) & 0x0000ffff; 오른쪽 ^= 온도; 왼쪽 ^= (온도 temp = ((왼쪽 >>> 4) ^ 오른쪽) & 0x0f0f0f0f; 오른쪽 ^= 온도; 왼쪽 ^= (온도
//Cipher Block Chaining 모드의 경우 이전 결과와 메시지를 xor합니다.
if (mode == 1) {if (encrypt) {cbcleft = left; cbcright = 오른쪽;} else {왼쪽 ^= cbcleft2; right ^= cbcright2;}}
tempresult = String.fromCharCode ((왼쪽>>>24), ((왼쪽>>>16) & 0xff), ((왼쪽>>>8) & 0xff), (왼쪽 & 0xff), (오른쪽>>>24), ((오른쪽>>>16) & 0xff), ((오른쪽>>>8) & 0xff), (오른쪽 & 0xff));
청크 = 8;
if (청크 == 512) {result = tempresult; 임시 결과 = ""; Chunk = 0;}
} //메시지의 8자 또는 64비트마다
//결과를 배열로 반환합니다.
return result tempresult;
}//des 끝
//des_createKeys
//이것은 64비트 키를 입력으로 사용합니다(56비트만 사용되더라도)
//배열로 2개의 정수로 구성되며 16개의 48비트 키를 반환합니다.
function des_createKeys(key) {
//이를 로컬로 선언하면 작업 속도가 약간 향상됩니다.
pc2bytes0 = new Array(0,0x4,0x20000000,0x20000004,0x10000, 0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204);
pc2bytes1 = 새 배열(0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0 x4000101,0x4100100,0x4100101); pc2bytes3 = 새 배열(0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0 x22000,0x222000,0x8022000,0x8222000); PC2BYTES4 = 새로운 어레이 (0,0X40000,0X10,0X40010,0X40000,0X10,0X40010,0X1000,0X41000,0X10,0X410,0X1000,0X41000,0X1010,0X41010);
pc2bytes5 = 새 배열(0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020 ,0x2000420);
pc2bytes6 = 새 배열(0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x1 0000002,0x80002,0x10080002);
pc2bytes7 = 새 배열(0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x200 20000,0x20030000,0x20020800,0x20030800);
pc2bytes8 = 새 배열(0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0 x2000002,0x2040002);
pc2bytes9 = 새 배열(0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x1000040 0,0x408,0x10000408);
pc2bytes10 = 새 배열(0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0 x102020);
pc2bytes11 = 새 배열(0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x500020 0,0x4200000,0x5200000,0x4200200,0x5200200);
pc2bytes12 = 새 배열(0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010, 0x81010,0x8080010,0x8081010);
pc2bytes13 = 새 배열(0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105);
//반복 횟수(des의 경우 1회, Triple des의 경우 3회)
var iterations = key.length > 8? 3:1; //2007년 6월 16일 Paul이 9바이트 키에 Triple DES를 사용하도록 변경했습니다.
//반환 키를 저장합니다.
varkeys = new Array(32 * iterations);
//이제 수행해야 할 왼쪽 시프트를 정의합니다.
var Shifts = new Array(0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0);
//기타 변수
var lefttemp, righttemp, m=0, n=0, temp;
for (var j=0; j
temp = ((왼쪽 >>> 4) ^ 오른쪽) & 0x0f0f0f0f; 오른쪽 ^= 온도; 왼쪽 ^= (온도 temp = ((오른쪽 >>> -16) ^ 왼쪽) & 0x0000ffff; 왼쪽 ^= 온도; 오른쪽 ^= (온도 temp = ((왼쪽 >>>> 2) ^ 오른쪽) & 0x33333333; 오른쪽 ^= 온도; 왼쪽 ^= (온도 temp = ((오른쪽 >>> -16) ^ 왼쪽) & 0x0000ffff; 왼쪽 ^= 온도; 오른쪽 ^= (온도 temp = ((왼쪽 >>> 1) ^ 오른쪽) & 0x55555555; 오른쪽 ^= 온도; 왼쪽 ^= (온도 temp = ((오른쪽 >>> 8) ^ 왼쪽) & 0x00ff00ff; 왼쪽 ^= 온도; 오른쪽 ^= (온도 temp = ((왼쪽 >>> 1) ^ 오른쪽) & 0x55555555; 오른쪽 ^= 온도; 왼쪽 ^= (온도
//오른쪽을 이동하고 왼쪽의 마지막 4비트를 가져와야 합니다.
temp = (left >> 20) & 0x000000f0);
//left는 거꾸로 놓아야 합니다.
left = (right >> 8) & 0xff00) | ((오른쪽>>>24) & 0xf0);
오른쪽 = 온도;
//이제 왼쪽 및 오른쪽 키에서 이러한 Shift 키를 수행합니다.
for (var i=0; i
if (shifts[i]) {left = (left >>26); 오른쪽 = (오른쪽 >> 26);}
else {왼쪽 = (왼쪽 >>27); 오른쪽 = (오른쪽 >> 27);}
왼쪽 &= -0xf; 오른쪽 &= -0xf;
//이제 암호화 또는 복호화 시 E가 더 쉬운 방식으로 PC-2를 적용합니다.
//이 변환은 각 바이트의 마지막 6비트만 사용된다는 점을 제외하면 PC-2처럼 보입니다.
//48개의 연속 비트가 아닌
에 따라 줄의 순서가 결정됩니다.//S 선택 기능이 적용되는 방식: S2, S4, S6, S8, S1, S3, S5, S7
lefttemp = pc2bytes0[왼쪽 >>> 28] | pc2bytes1[(왼쪽 >>> 24) & 0xf]
| pc2bytes2[(왼쪽 >>> 20) & 0xf] | pc2bytes3[(왼쪽 >>> 16) & 0xf]
| pc2bytes4[(왼쪽 >>> 12) & 0xf] | pc2bytes5[(왼쪽 >>> 8) & 0xf]
| pc2bytes6[(왼쪽 >>> 4) & 0xf];
righttemp = pc2bytes7[오른쪽 >>> 28] | pc2bytes8[(오른쪽 >>> 24) & 0xf]
| pc2bytes9[(오른쪽 >>> 20) & 0xf] | pc2bytes10[(오른쪽 >>> 16) & 0xf]
| pc2bytes11[(오른쪽 >>> 12) & 0xf] | pc2bytes12[(오른쪽 >>> 8) & 0xf]
| pc2bytes13[(오른쪽 >>> 4) & 0xf];
temp = ((righttemp >>> 16) ^ lefttemp) & 0x0000ffff;
키[n] = 왼쪽온도 ^ 임시; 키[n ] = righttemp ^ (temp }
} //각 반복마다
//생성한 키를 반환합니다.
return key;
} //des_createKeys 끝
///////////////////////////// / 테스트 /////////////////////////////
function stringToHex (s) {
var r = "0x" ;
var hexes = 새 배열("0","1","2","3","4","5","6","7","8","9"," a","b","c","d","e","f");
for (var i=0; i
return r;
}
function hexToString (h) {
var r = "";
for (var i= (h.substr(0, 2)=="0x")?2:0; i
}
var key = "24바이트 키입니다!!";
var message = "테스트 메시지입니다.";
var ciphertext = des(키, 메시지, 1, 0);
document.writeln("DES 테스트: " stringToHex(암호문));

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

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

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

드림위버 CS6
시각적 웹 개발 도구
