Я перехожу на JavaScript

, 5 Go, , . Go . , , , Go.

, Go. , , , , .



, Go JavaScript, Go. , . , JavaScript, , .


JavaScript . - , . . JavaScript , . . JS .

var sb = new ArrayBuffer(4)
var intArr = new Int32Array(sb)
intArr[0] = 1 << 16
// 65536
intArr[0]
// 65536

— , : . , .

, JavaScript , . Int32Array Int16Array, , , :

var sb = new ArrayBuffer(4)
var intArr = new Int32Array(sb)
intArr[0] = 1 << 16
// 65536
intArr[0]
// 65536
//      
var shortArray = new Int16Array(sb)
shortArray[0]
// 0
shortArray[1]
// 1

: « , ? — , ?». : «, . ».

. , , , , :

var shortArr = new Int16Array(1)
var c = shortArr[0] = 1 << 15 // :   
c == shortArr[0]
// false
shortArr[0]
// -32768
c
// 32768

, JavaScript, , , .

(%) . , :

3.14 % 5
// 3.14
13.14 % 5
// 3.1400000000000006

, , , « ». , . JavaScript :

[-2, -7, 0.0000001, 0.0000000006, 6, 10].sort()
// [-2, -7, 10, 1e-7, 6, 6e-10]
       :
(1,2,3,4,5,6) === (2,4,6)
true

, , , . . , , , . JavaScript , :

var a = "41"
a += 1
// 411, , , .
var b = "41"
b -=- 1
// 42,           

, ( ). , , 0, — 1. , , , .


, JavaScript — , , . , JavaScript Twitter.

, ??, :

~~!![[]]||__``&&$$++<<((""??''))**00==ಠಠ--//\\
// 1

banana? :

('b'+'a'++'a'+'a').toLowerCase()
// Uncaught SyntaxError: Invalid left-hand side expression in postfix operation
('b' + 'a' + + 'a' + 'a').toLowerCase()
// "banana"

«»? JavaScript :

//   -   
input ?? obj?.key ? 'yes' : 'no'

— . . JavaScript , :

var re = /a/g
re.test('ab')
// true
re.test('ab')
// false
re.test('ab')
// true

JS . :

{property: "value"} && {property: "value"}
// {property: "value"}
Date() && Date()
// "Wed Apr 1 2020 00:01:00 GMT+0100 (Central European Standard Time)"
Date() && {property: "value"}
// {property: "value"}
{property: "value"} && Date()
// Uncaught SyntaxError: Unexpected token '&&'

, :

typeof([1][0])
// number
for(let i in [1]){console.log(typeof(i))}
// string

, . , , :

const x={
  i: 1,
  toString: function(){
    return this.i++;
  }
}

if(x==1 && x==2 && x==3){
  document.write("This will be printed!")
}

, JavaScript-, , DOM:

document.all
// HTMLAllCollection(359) [html.inited, head, …]
document.all == true
// false
document.all == false
// false


. , . - — .

. JS-:

(function({substr}){return substr.call})("")
// function call()
var x = (function({substr}){return substr.call})("")
// undefined
x.name
// "call"
x + ""
// "function call() {
//     [native code]
// }"
typeof x
// "function"
x("this is a string")
// TypeError: Function.prototype.call called on incompatible undefined

:

(function(){return this}.call(1)) == (function(){return this}.call(1))
// false

:


, , -, , JavaScript.

, , , : .

JavaScript , , , — , , , . , , , JavaScript .

JavaScript Go — , 3:

for (i = 1; i <= 2; ++i) {
  setTimeout(function(){
    console.log(i);
  }, 0);
}

, , , :

console.log(0)
setTimeout(_ => console.log(1), 0)
requestAnimationFrame(_ => console.log(2))
Promise.resolve().then(_ => console.log(3))
console.log(4)
// 0
// 4
// 3
// 2
// 1

, , , «-», «-» , .

, , JavaScript. ?

, . codediodeio.

//         :
const start = Date.now();
function log(v){console.log(`${v} \n Elapsed: ${Date.now() - start}ms`);}
//    ,   
function doWork(){
  for(let i = 0; i < 1000000000; i++); //      
  return 'work done';
}
log('before work');
doWork();
log('after work');
// before work
//  Elapsed: 0ms
// after work
//  Elapsed: 624ms

, .

:

function doWork(){
  return new Promise((resolve, reject) => {
    for(let i = 0; i < 1000000000; i++);
    resolve('work done');
  })
}
log('before work');
doWork().then(log);
log('after work');
// before work
//  Elapsed: 0ms
// after work
//  Elapsed: 637ms
// work done
//  Elapsed: 637ms

. - , , , «-», , . , «-»:

function doWork(){
  //  `resolve`        
  return Promise.resolve().then(v =>  {
    for(let i = 0; i < 1000000000; i++);
    return 'work done';
  })
}
log('before work');
doWork().then(log);
requestAnimationFrame(()=>{log('time to next frame')});
log('after work');
// before work
//  Elapsed: 0ms
// after work
//  Elapsed: 1ms
// work done
//  Elapsed: 631ms
// time to next frame
//  Elapsed: 630ms

, , . . . , , - , , , .

— - , - : , JavaScript, . , async/await , . , . , , , fetch. , , .

? - — . — , JavaScript .

- : , , , — , , postMessage. . , , MDN. ? , , — , . , , . — ?

JavaScript , , , . ? . postMessage MessageChannel ( chan), . , « », , . .

- , - , , , - - , SharedArrayBuffer. , , . Mutex, select, WaitGroup. — ( ). ? API , !

, , ‽ ( — , JavaScript).


JavaScript — , , : , , . , JS , - , , « ». , JavaScript, . ?

! JavaScript , ?


All Articles