ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
+130 kunlar
Postlar arxiv
1 419
# ืื ืืืืจื ืฉื ืืื ืืฉืจืื ื 2022
ืืืจืืช ืฉืขืฉืื ื ืืชืงืืืืช ืืฉืืขืืชืืช ืืื ืื ืฉืงืฉืืจ ืืืืคืื ืืืื ืืงืื ืืฉืคืืช ืชืื ืืช, ืคืืกื ืฉืขืื ืืืืจืื ื ืืจืืื ืืืืืจ ืื ืฉืื ืืื ืืจืื ืืฉืื ื 2022 ืจืื ืฉืคืืช ืืชืื ืืช ืฉื ืขืืื ืืืชื ืืืจืฉื ืืืคืื ืืืืื ืืฉืืื ืืืฉื ื ืืื ืืืจื ืฉื ืืืจืืืช. ืื ื ืกืงืืจื ืืจืืื ืฉืขืฉืืชื ืืขืงืืืช ืืืชื ืคืืกื ืืื ืืืืื ืื ืืืืจื ืฉื ืืื ืืฉืจืื ืืฉืคืืช ืชืื ืืช ืฉืื ืืช ืฉืื ื ืืืืจ.
## ื'ืืืืืกืงืจืืคื
ืื ืืืื ืฉื ืืงืืื - ืืฉืื ื ืฉืืื ืขื ืืื ืืฉืจืื ืื ื ืืขืฆื ืืืืจ ืขื ืืืืืื'ื ืฉื ืืืื ืฉืืชื ืืืืจืื ืืืืืืกืืค. ื HTML ืืคืฉืจ ืืืืคืืก ืืืชื ืืขืืื ืขื ืืงืื:
<span>🇮🇱</span>
ืืื ืืจืื ืืืืื ืืื ืืืจืื ืืฉื ื Unicode Codepoints, ืืจืืฉืื ืืืืฆื ืืช "ืกืืื ืืืืจื I" ืืืฉื ื "ืกืืื ืืืืจื L". ืื ื ืืื ืฉืจืืืื ืืช ืืืืืื'ื ืืื ืืชืืืกืื ืืืื ืืชืืจ ืชื ืืื, ืืืฉืคื ืืงืฆืืขืืช ืื ื ืงืจื Grapheme ืืื. ืืจืื ืืืืื'ืื ืืืจืื (ืฉืืื ื ืืืืื) ืืืืฆืืื ืขื ืืื Codepoint ืืืื, ืืื ืฉืืขื ืืื ืืืืืื ืื ืฉืื ืืจืืื ืื ื ืืช ืืืืื ืืื Codepoints ื Graphemes. ืงืืืคืืื ื ืืืื ืืงืื ืื ืคืฉืื ืชื ืืื ืืงืืื ืืืื, ืืืจืคืื ืื ืื ืฉืื ืื ื ืืื ื ืืื ืชืืคืกืื ืืชืืจ ืชื ืืื.
ืฉืคืช ืืชืื ืืช ืืจืืฉืื ื ืฉืจืฆืืชื ืืืืืง ืืื ืืื ืืืคืืช ืืืจืคืืืช ืืื ื'ืืืืืกืงืจืืคื ืคืฉืื ืื ืงืื JavaScript ื ืจืื ืื ืืื ืืฉืื ืฉืืกืืืจืืช ืืืืื ืืคืืืฉ ืืืืื'ืื. ืื ืืชืืชื ืืช ืืชืืื ืืช ืืืื:
console.log("๐ฎ๐ฑ".length);
ืื ืืกืืชื ืืืจืืฅ ืืืชื ืื ื node ืืื ืืืจืื. ืืชืืฆืื ืืฉื ื ืืืงืืืืช ืืืชื ืืื - ืืืกืคืจ 4.
ืืฉื ืืกืืชื ืืฉืืื ืืช ืืืื ืื ืืฉ ืืจื ืืกืคืืจ ืืจืคืืืช ื JavaScript ืืื ืื ืืืข ืืืืืืฅ ืื ืขื ืืจื ืืืื ืืช ืืฉืคื, ืืื ืื ืฉืื ืืืชื ืืกืคืจืื ืืืืช:
https://github.com/orling/grapheme-splitter ืฉื ืจืื ืฉืืืืขืช ืืกืคืืจ ืืื ืฉืฆืจืื.
## ืคืืืชืื
ืืคืืืชืื ืืืฆื ืงืฆืช ืืืชืจ ืืื. ืืชืืื ืืช ืฉืืชืืชื ื ืจืืืช ืื:
print(len("๐ฎ๐ฑ"))
ืืืคืขื ืืชืืฆืื ืืืชื 2. ืขืืืื ืื ืืืืืง ืืื ืืคืืืช ืงืฆืช ืืืชืจ ืงืจืื ืืืืจื ืืืืืชื.
ืื ืืื ืืืื ืื ืืืข ืืืฆืืข ืื ืืจื ื ืืื ืืืืื ืืช ืืฉืคื ืืกืคืืจ ืืจืคืืืช, ืืืืงืื ืฉืื ืืืชื ืืกืคืจืื ืืืืช https://pypi.org/project/grapheme/ ืฉื ืจืื ืฉืืฆืืืื ืืืชืืืื ืขื ืืืชืืจ.
## ืจืืื
ืื ืืจืืื ืื ืืกืืื ืืจืืฉืื ืฉืื ืืงืื ืืช ืืืืจื ืืืืืจ 2:
puts "๐ฎ๐ฑ".length
ืืื ืืคืขื ืืืื ืืืจ ืืืข ืืกืคืจ ืฉืื ื ืคืฉืื ืื ืืคืขืื ืืช ืืคืื ืงืฆืื ืื ืืื ื, ืืืืจื ืืืืืชืืช ืืกืคืืจ ืืจืคืืืช ืืืืจืืืช ืืจืืื ืืื ืคืฉืื:
puts "๐ฎ๐ฑ".grapheme_clusters.length
ืืื ืืืจ ืืืืืจ ืืช ืืชืืฆืื ืื ืืื ื - ืืืืืจ 1.
## ืคืจื
ืืฉืืื ืืกืืื ืืช ืกืื "ืฉืคืืช ืืกืงืจืืคืืื" ืืฉืืชื ืื ืกืืช ืืจืืืช ืื ืืืฆื ืืคืจื. ื ืืื, ืืืื ืื ืืชืืชื ืื, ืืื ืื ืืื ืืจืื ืขื ืืืคื ืืื ืื ืืฉืื. ืืงืืฆืืจ ืืืืจืกื ืืจืืฉืื ื ืฉืืชืืชื ืืคืจื ืืืฉืืื ืืช ืืืกืืจืช ืฉื ืคืืืชืื ืืจืืื ืืืืืืจื 2:
use v5.30;
use utf8;
say(length("๐ฎ๐ฑ"));
ืืื ืื ืืืื ืืคืืืชืื, ืืคืจื ืืืืื ืืืืืืืื ืืจืืืืืจืืื ืืกืคืืง ืืฉืืืื ืืื ืืกืคืืจ ืืจืคืืืช ืขื ืืชื ืืืืืื \X (ืืืื ืช ืคืืืชืื ืฆืจืื ืืืืื ืฉืืฉ ืกืคืจืื ืืืฆืื ืืช ืืฉื regex ืฉืื ืืกืคืงืช ืืช ืืืชื ืืืืช ืืืืช ืื ืฉื). ืืื ืืงืจื ืืงืื ืืื ืืคืจื ืืืจ ืืืคืืก ืืช ืืชืืฆืื ืื ืืื ื:
my $str = "๐ฎ๐ฑ";
my $count = 0;
while ($str =~ /\X/g) { $count++ }
say($count);
ืงืฆืช ืืืชืจ ืืจืื ืืจืืื ืืื ืขืืืื ืืกืคืืง ืืื ืืขืื ืื.
## ืืืืงืกืืจ
ืฉืชื ืืฉืคืืช ืืืืจืื ืืช ืืกืงืืจื ืื ืืื ืฉืขืืฉืืช ืืช ืืืืจ ืื ืืื ืืืืชืืื. ืืืืืงืกืืจ, ืืคืงืืื String.length ืืืืืจื ืืช ืืืืจื ืืืจืคืืืช, ืืืื ืืชืืื ืืช ืืืื ืืืคืืกื 1:
String.length("๐ฎ๐ฑ")
|> IO.inspect
## ืกืืืืคื
ืืืืชื ืืืฉืืง ืงืืจื ืืกืืืืคื, ืืฉืืคืื ืงืฆืื count ืืจืืืื ืืืืฉืื ืืืจื ืืืคืืกื ืืช ืืืืจ ืื ืืื ืืื ืืขืฉืืช ืขื ืืื ืื:
print("๐ฎ๐ฑ".count)
ืื ื ืกืื - ืื ื 2022 ืืจืื ืฉืคืืช ืชืื ืืช ืคืืคืืืจืืืช ืืืจืืืืช ืืชืื ืืืชืงืื ืกืคืจืื ืืืฆืื ืืช ืื ืืืฉืชืืฉ ืืงืื ืืืืื ืืื ืืกืคืืจ ืืื ืฉืฆืจืื ืืื ืชืืืื ืืฉ ืืืืจืืืช. ืงืฉื ืื ืืจืืืช ืืช ืื ืืฉืชื ื ืืขืชืื ืืงืจืื ืืืขืื ืชืืืืืช ืืืืจื ืืืื ืืืืจืืืช ืืืืืื ืฉืื ื. ืฉืืื ืื ืืืืื ืฉืคื ืืชื ืขืืืืื ืืืืื ืืืคืื ืืืืื ื ืืจืฉ ืืขืืืื ืขื ืืืจืืืืช.1 419
https://github.com/axios/axios/issues/1227.
ืืขืืจ ื Fetch ืืืคืฉืจ ืืืคืขืื ืืช ืืคืจืืืจ maxRedirects ืื ืืืคืืคื.
2. ืืจืืข ืืื ืืืืงืืช ื adapter ืฉื xhr. ืืกืคืจืื MSW ืืืคืฉืจืช ืืื ืืช ืฉืจืช http ืงืื ืืชืื ืืืคืืคื. ืืืืฆืขืืชื ืืคืฉืจ ืืื ืืช ืืืืงืืช ืืงืื ืืชืงืฉืืจืช ืฉืืจืืฆื ืื ืืืคืืคื ืืื ื Node.JS, ืืืืืงื ืืช ืฉื ื ื adapters ืืืื ืืืช.
3. ืืจืืข ืื adapter ืืืื ืืช ืงืื ืืชืงืฉืืจืช ืืืื ืฉืืื ืฆืจืื, ืื ืฉืืืจื ืืืคื ืงืื ืืื ืืื ืืืืืื ืืืืคืื ืืืืืื ืืงืฉื. ืืคืฉืจ ืืืจืื ืืืจืช ืืช ืืงืื ืืื ืืืื ืืช ืืคื ืืงืื ืืื.
ืขื ืืคื ืกืงืืจืช ืืืจืืืืงืืืจื ืืืจืืืืช ืฉื axios. ืืจืืจ ืฉืืฉ ืขืื ืืจืื ืงืื ืืืืืจ ืืืื ืืกืคืจืื ืืื, ืืื ื ืืงืืื ืฉืกืงืืจื ืื ื ืชื ื ืืื ืืช ืืืืื ืืืชืืฆื ืืื ืืืชืจ ืืกืคืจืื ืืืืืฉืื ืืฆืืื ืืื ืื ืื ืฉืื ืฉืืขื ืืื ืื ืืชืื.
1 419
config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
}
}
ืืืงืืข ืืื ืืืคื ืืืืืื ืืงืฉื ืืงืืืฅ ื adapter ืืฉื ื, ืืงืืืฅ adapters/http.js:
if (config.cancelToken || config.signal) {
// Handle cancellation
// eslint-disable-next-line func-names
onCanceled = function(cancel) {
if (req.aborted) return;
req.abort();
reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);
};
config.cancelToken && config.cancelToken.subscribe(onCanceled);
if (config.signal) {
config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
}
}
ืืจืืื ืืืืฉ ืฉื ืืงืื ืืฉื ื ื adapters ืืื ืืืื ืืืกืื ืืืง ืืืื ืืืืคืืืืช, ืืืืื ืืขืฉืืช ืืืื ืืืชืจ ืงืืื ืืื ืฉืืืื ืืื ืืช adapter ืืืฉ.
## ืืจืื ืืืื ืืชืืงืืืช ืืืืืืืืช
ืฉืชื ืืชืืงืืืช ืืืืืช ืื ืืืจ ืื ืกืื ืืจืืืืช ืืคืจืืืงืื ืงืื ืคืชืื. ืืชืืงืืื examples ืืืืืช ืงืืืฅ ืืฉื server.js, ืฉืื ืชืจืืฆื ืืืชื ืชืงืืื ืฉืจืช ืฉืืืืข ืืืืืฉ 6 ืืืืืืืช ืฉืื ืืช (ืืกืืืจืืช ืืคื ืืชืื ืชืืงืืืช ืืชืื examples), ืื ืืืืื ืืกืคืจืช ืืฉืื ืขื ืืื ืืืฉืชืืฉ ื axios. ืืืืืื ืืงืืืฅ examples/get/index.html ืืจืื ืื ื ืืื ืืืฉืชืืฉ ื axios ืืื ืืงืื ื Ajax ืจืฉืืืช ืคืจืืืื ืืืฉืจืช ืืืฉืชืื ืืืชื ืืชืื ืงืืืฅ html:
<!doctype html>
<html>
<head>
<title>axios - get example</title>
<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"/>
</head>
<body class="container">
<h1>axios.get</h1>
<ul id="people" class="list-unstyled"></ul>
<script src="/axios.min.js"></script>
<script>
axios.get('/get/server')
.then(function (response) {
document.getElementById('people').innerHTML = response.data.map(function (person) {
return (
'<li class="row">' +
'<img src="https://avatars.githubusercontent.com/u/' + person.avatar + '?s=50" class="col-md-1"/>' +
'<div class="col-md-3">' +
'<strong>' + person.name + '</strong>' +
'<div>Github: <a href="https://github.com/' + person.github + '" target="_blank">' + person.github + '</a></div>' +
'<div>Twitter: <a href="https://twitter.com/' + person.twitter + '" target="_blank">' + person.twitter + '</a></div>' +
'</div>' +
'</li><br/>'
);
}).join('');
})
.catch(function (err) {
document.getElementById('people').innerHTML = '<li class="text-danger">' + err.message + '</li>';
});
</script>
</body>
</html>
ืืฉืืืืฉ ืืขืืงืจื ืืชืืงืืืช ืืืืืืืืช ืืืขืชื ืืื ืืืืจ ืืืืืช ืืืคืฉืจ ืืื ืฉืื ืืคืชืื ืืช ืืงืื ืืชืื ืืชืจ ืขืจืืืช ืงืื ืืื ืืืื ืืื gitpod (ืืื ืืคืืืช ืื ืืกืคืจืื ืืชืืขืื) ืืื ืืืืืฆื ืืืช ืืคืฉืจ ืืจืืืช ืืช axios ืืคืขืืื ืืชืื ืงืืืฅ HTML ืขื ืงืื ืฆื ืฉืจืช ืืืื. ืืืฆืืืืช ืืฉืืื ืืืฉืช ืืชืืงืืืช ืืืืืืืืช ืืืืืคืื ืฆืจืื ืืืืื ืก ืืงืืฉืืจ ืืืืคืื ืฉืืื ืืื:
https://gitpod.io/#https://github.com/axios/axios/blob/master/examples/server.js
ืืืืืช ืฉืืคืจืืืงื ืืืื ื ืืื ืืืืืฅ ืขื ืืืคืชืืจ ืฉื ืืฅ-ืงืื-ืืชืื-ืจืืืืข ืืื ืืคืชืื ืืช ืืชืืฆืื ืืืืื ืืืฉ, ืืืจืช ืงืืืฅ ื server.js ืฉืืื ืืืืืจ ืฉืืืืช 404.
ืืชืืงืืืช sandbox ืื ืื ื ืืืืืื ืืืฆืื ืงืืืฅ HTML ืืฉืจืช ืฉืืืืฉ ืืืชื ืฉืืืคืฉืจ ืืจืฆื ืฉื axios ืืชืื ืืืคืก.
ืืืขืชื ืฉืชื ืืชืืงืืืช examples ื sandbox ืื ืืืขืืืืช ืืืืืื ืืืื ืืคืฉืจ ืืืืชืจ ืขืืืื.
## ืจืขืืื ืืช ืืชืจืืืืช ืงืื
ืื ืืืขืชื ืขื ืืื ืืงืจืืื ืืชื ืืืจ ืืืื ืื ืืืจ ืื ืฉื ืืื ืขื ืืื ืขืืืืช ืืกืคืจืื axios. ืื ื ืจืืฆื ืืกืืื ืืช ืืกืงืืจื ืืืื ืืฆืขืืช ืฉืืชื ืืืืืื ืืืืฉ ืืฉืืื ืืืืื ืขืื ืขื ืืกืคืจืื ืืืกืืฃ ืื ืืฉืคืจ ืืืชื:
1. ืืจืืข ืืฉ ืืืงืกืืืก adapters ืขืืืจ XMLHttpRequest ืืขืืืจ Node.JS. ืืคืืคื ืื ืืืจ ืืืืืื API ืืืฉ ืฉื ืงืจื Fetch API ืฉืืืคืฉืจ ืขืื ืืื ืืืืืืช ืื ืืกืฃ ื xhr. ืืคืฉืจ ืืืืกืืฃ Adapter ืขืืืจ Fetch API.
ืชืืกืคืช ืืืืช ืืืืื ืืชืช ืขืื ืืืืืืช ืืกืคืจืื, ืืืฉื ืืืื ืืงืื ืฉื xhr ืื ืชืืื ืืืืืืช ืืกืคืจ ื Redirects ืืื ืฉืืืคืืข ื Issue ืืื:1 419
axios.Axios = Axios;ืืืฅ ืืื ื ืืื ืืจืื ืืืืืงื ืืงืืืฅ, ืืืื ืืชืื ื ืืืื ืฉืื ืืื ืืงืืืฅ
code/Axios ืฉื ืืืืืจืช ืืืืืงื Axios. ืื ืืืจ ืงืืืฅ ืืจืื ืืืชืจ ืืขื ืืื ืฉืืืขื ืืืืข ื 150 ืฉืืจืืช. ืืคืื ืงืฆืื ืืืจืืืืช ืื ื ืงืจืืช request. ืืื ืงืฆืช ืืจืืื ืื ืื ื ืืืืืง ืืื ืจืง ืืช ืืืืง ืฉืื ืฉืงืฉืืจ ืืฉืืืืช ืืงืฉื:
var chain = [dispatchRequest, undefined];
Array.prototype.unshift.apply(chain, requestInterceptorChain);
chain = chain.concat(responseInterceptorChain);
promise = Promise.resolve(config);
while (chain.length) {
promise = promise.then(chain.shift(), chain.shift());
}
return promise;
ืื ืืฉ ืคื ืฉืืืฉ ืฉืืจืืช ืจืืฉืื ืืช ืงืฆืช ืืืืืืืช ืืฉืื ืืืื ืื ืืขืจื ืืฉื chain, ืืื ืื ืฉืืฉืื ืืื ืืคืื ืงืฆืื dispatchRequest ืฉืืืจืืืช ืขื ืฉืืืืช ืืืงืฉื ืืคืืขื. ืืืขืื ืฉืืืืืจื ืฉืื ืขืืืื ืื ืืื. ืื ื ืืืฉืื ืืงืืืฅ dispatchRequest.js ืืืืชื ืชืืงืื ืืื ืฉื ืืืฆื ืคืื ืงืฆืื ืจืืฉืืช ืงืฆืช ืืจืืื ืขื ืืงืื ืืจืืฉื ืืื:
var adapter = config.adapter || defaults.adapter;
return adapter(config).then(function onAdapterResolution(response) {
throwIfCancellationRequested(config);
// Transform response data
response.data = transformData.call(
config,
response.data,
response.headers,
config.transformResponse
);
return response;
}, function onAdapterRejection(reason) {
ืืืงืื ืื ืืฉืืื ืืฉืืื ืืงืฉื ืื ืื ื ืคืื ืื ืืคืื ืงืฆืื ืืฉื adapter, ืืขืืืจืื ืืช ืคืจืื ืืืงืฉื ืืืงืืื ืืืืจื ืืืืืงื response ืฉืืืฉืื ืืขืืืจ ืืจื ืกืคืืจืืฆืืืช ืืคื ื ืฉืืืืืจ ืืงืื ืฉืงืจื ืืืงืกืืืก. ืืืจื ืกืคืืจืืฆืืืช ืื ืื ืจืื ืคืืขื ืื ื JSON ืืืืจืื ื ืืกืคืื ืืกืื ืื, ืืื ืื ืื ื adapter?
ืืืื ืฉืืื ืืืืืจ ืืชืื config ืืื ืืืืื ืืืืืฅ ืื ื ืงืฆืช ืชืงืืข. ืืื ืื ื ืืคืขืื ืืืคืืฉ ืขื ืื ืืงืืฆืื ืืชืืงืื:
~/tmp/axios/lib โฑ master !5 ๎ฐ ack -l adapter
core/README.md
core/dispatchRequest.js
core/mergeConfig.js
adapters/README.md
defaults.js
ืืืืจื ืืืืื ืืืืจ ืืืืื ืืืืข ื defaults.js ืืฉื ืืคืื ืงืฆืื:
function getDefaultAdapter() {
var adapter;
if (typeof XMLHttpRequest !== 'undefined') {
// For browsers use XHR adapter
adapter = require('./adapters/xhr');
} else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
// For node use HTTP adapter
adapter = require('./adapters/http');
}
return adapter;
}
ืืืงืื ืขืืฉืื ืื ื ืืืื! ืื ืื ืืขืฆื ืืกืชืืืื ืื ืื ื ืืืคืืคื (ืืืืืจ ืื ืืฉ ืื XMLHttpRequest) ืืื ืืืฉืชืืฉ ื adapter ืืฉื xhr, ืฉืื ืจืื ืขืืืฃ ืืช XMLHttpRequest, ืื ืื ืื ื ื node ืืื ืืืื ืขื adapter ืืฉื http, ืฉืื ืจืื ื ืืชื ืขืืืคื ืืืื ืืื ืื ืื ืืชืงืฉืืจืช ืืืืื ื ืฉื node.
## ืชืืงืืืช adapters
ืืืจ ืจืืื ื ืฉืืชืืงืืืช test/unit/adapters ืืฉ ืงืืืฅ ืืฉื http.js ืฉืืืืง ืืช ืงืื ืืชืงืฉืืจืช, ืืขืืฉืื ืื ืื ื ืจืืืื ืฉืืฉ ืื ืื ืืงืืืื ืืชืืงืืืช ืืืงืืจ: ืืงืืืฅ lib/adapters/http.js. ืงืืืฅ ืื ืขืืืฃ ืืช ืื ืื ืื ืืชืงืฉืืจืช ืืคื ืืื ืฉื node ืืืื ื ืฉื Axios Adapter.
ืืืืจ ืืฉื ื ืืชืืงืื ืืื ืืงืืืฅ xhr.js. ืืงืืืฅ ืื ืืื ืงืืืฅ ืืืืงืืช, ืืื ืืืืื ื. ืื ืื ื ืขืืฉื Mocking ืืื ืงืื ืืชืงืฉืืจืช ืืืคืืคื, ืื ืื ื ืื ืืืืช ืืืื ืืืืืง ืืช ืืงืื ืฉืืืจืื ืขื ืืชืงืฉืืจืช. ืื ืืืืช ืืื ื ืืื ืืขืืจ, ืืื ืืืื ืืืจ ืืคืฉืจ ืืืฉืชืืฉ ืืกืคืจืื ืืื Mock Service Worker ืืื ืืื ืืช ืืื ื ืฉืจืช ืืื ืืชืื ืืืคืืคื ืืืืืืง ืืืง ืืืื ืืงืื ืืชืงืฉืืจืช.
ืืืืื ืช ืืงืื ืืงืืืฅ lib/adapters/xhr.js ืืื ืืคืชืขืืช ืืืืืืช. ืื ืื ื ืืืฆืืื ืืชืืืืช ืืคืื ืงืฆืื ืืช:
var request = new XMLHttpRequest();
ืืืืืฉื ืืืืจืช ืื ืืืืคืืื ืื ืฉื ืืืชื request ืขื ืืกืืื ืขื:
request.send(requestData);
ืื ืฉืื ืืืื ืืฉืื ืื ืืืืืจื ืืื ืืช ืฉื ื ืงืืฆืื ืฉืื ืื ืขืืืจ ืืชืงืฉืืจืช ืืื ืืคื ืืงืื ืฉืืฉ ืืื ืฉื ื ืืงืืฆืื. ืืงืืข ืืื ืืืคื ืืืืืื ืืงืฉื ืืงืืืฅ xhr.js:
if (config.cancelToken || config.signal) {
// Handle cancellation
// eslint-disable-next-line func-names
onCanceled = function(cancel) {
if (!request) {
return;
}
reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);
request.abort();
request = null;
};
config.cancelToken && config.cancelToken.subscribe(onCanceled);
if (config.signal) {1 419
ืื ื ืืืื ืืืืชื ืืช ืกืื ืื ืืืืืงื ืืืืืืง - ืืืฆืจืื ืืืืืงื, ืคืืชืืื ืฉืจืช ืฉืืืืืจ ืืืชื ืขื Content-Type ืฉื application/json, ืืื ืืืืงืื ืฉืืฉื ืคื ื ืืืืชื ืฉืจืช ืืืืช ื ืงืื ืืช ืืืืืืงื ืืคืืขื ื. ืืืื ืฉืืืืืงืืช ืืืื ืจืฆืืช ืืฆื ืฉืจืช ืืืื ืงื ืืืจืื ืฉืจืช ืืื ืืืืืง ืืช ืื ืืชืงืฉืืจืช. ืืฆื ืืืคืืคื ืื ืืฆืืจืื ืืขืืื ืงืฆืช ืืืชืจ ืงืฉื ืืฉืืื ืืงืื ืชืืฆืื ืืืื.
## ืืืืงืืช ืงืืจืื
ืชืืงืืืช ืืืืืงืืช ืืฉื ืื,
specs, ืืื ืื ืืืืืื ืืืชืจ ืืื ืจืื ืฉืืื ืืืฉืงืขื ืขืืงืจ ืืืืืฆืื ืืืชืืืช ืืืืืงืืช. ืืฉ ืืืืงืืช ืืื ืืกืืืื ืืืืืื ืืงืืืฅ test/specs/core/buildFullPath.spec.js ืืืืง ืคืื ืงืฆืื ืืืืจื ืืืช ืืฉื buildFullPath:
var buildFullPath = require('../../../lib/core/buildFullPath');
describe('helpers::buildFullPath', function () {
it('should combine URLs when the requestedURL is relative', function () {
expect(buildFullPath('https://api.github.com', '/users')).toBe('https://api.github.com/users');
});
it('should return the requestedURL when it is absolute', function () {
expect(buildFullPath('https://api.github.com', 'https://api.example.com/users')).toBe('https://api.example.com/users');
});
it('should not combine URLs when the baseURL is not configured', function () {
expect(buildFullPath(undefined, '/users')).toBe('/users');
});
it('should combine URLs when the baseURL and requestedURL are relative', function () {
expect(buildFullPath('/api', '/users')).toBe('/api/users');
});
});
ืืฉืืืืขืื ืืืืืงืืช ืืชืงืฉืืจืช ืขืฆืื ืืืืืงื ืืฉืชืืฉืช ื Mocks ืืื ืืืืืช ืืช ืืชืงืฉืืจืช ืืืืืื ืฉืืงืื ืฉืืื ืืงืฉืืช ืืืคืขื ื ืชืฉืืืืช ืืื ืฉืฆืจืื. ืืืืืื ืืืืืงื ืืืื ืืชืื ืืงืืืฅ test/specs/instance.spec.js:
beforeEach(function () {
jasmine.Ajax.install();
});
afterEach(function () {
jasmine.Ajax.uninstall();
});
it('should make an http request with url instead of baseURL', function (done) {
var instance = axios.create({
url: 'https://api.example.com'
});
instance('/foo');
getAjaxRequest().then(function (request) {
expect(request.url).toBe('/foo');
done();
});
});
ืืืืืงื ืืฉืชืืฉืช ืืื ืื ืื ืืจืืืื ืฉื jasmine ืืื ืืชืคืืก ืืงืฉืืช Ajax ืืืืืืืฃ ืืืชื ื Mocks ืฉืืคืฉืจ ืืืื ืืชืฉืื.
ืขืืฉืื ืื ืืืื ืืื ืืื ืืืฆืืฅ ืืชืืงืืืช lib ืืื ืืจืืืช ืืช ืืื ื ืชืืงืืืช ืงืืฆื ืืืงืืจ, ืื ืืื ืืฉืื ืื ืฉืืื ื ืชืืงืืืช ืืืืืงื ืืืื ืืืื ืืืื ื ืชืืงืืืช ืืืงืืจ. ืืชืืงืืืช core, cancel ื helpers ื ืืฆืืืช ืฉืืืฉืชื ืื ืืชืืงืืืช ืืืงืืจ ืืื ืืชืืงืืืช ืืืืืงืืช. ืื ืืืืื ืช ืืงืืฆืื ืืฉ ืืืืื, ืืืืืื ืืงืืืฅ test/specs/defaults.spec.js ืื ืจืื ืืืืง ืืช ืืงืื ืฉื ืืฆื ืืงืืืฅ lib/defaults.js. ืืืชืืื ืืื ื ืืื ืืืื ืืืฉ ืืจืื ืงืืฆื ืืืืงืืช ืฉืืื ืืื ืงืืืฅ ืืงืืจ ืืชืืื, ืืื ืืืืคื ืืจืื ืงืืฆื ืืงืืจ ืืื ืงืืืฅ ืืืืงืืช ืืชืืื.
ืืืืืืช ืืฉื ืืช ืงืฆืช ืงืื ืืื ืืืจืืฅ ืืช ืืืืืงืืช ืืื ืืจืืืช ืฉืื ืฉืืจื ื ืืืื ืืื ืงืจืืืืช ืืคืจืืืงื ืงืื ืคืชืื ืฉืจืืฆื ืืงืื ืชืจืืืืช ืืืชืื ืชืื ืืื ืืขืืื. ืืฉืื ื ืืกืชืื ืขื ืคืจืืืงื ืืื axios ืืืืืงืืช ืขืืืจืืช ืื ืืืจืืืฉ ืืืื ืืคื ื ืฉืื ื ืืืกืืฃ ืคืืฆ'ืจ ืืืืืฆืจ Pull Request, ืื ืื ืืืจืืืืช ืืช ืืกืืืื ืฉืืฉืืืจ ืืฉืื ืืื ืืฉืื ืื.
## ืืื ืืงืกืืืก ืืืฆืื ืืงืฉืืช http
ืื ืืืืืงืืช ืืืืืงืืช ืืงืื Node.JS ืืงืื ืืคืืคื - ืื ืจืื ืฉืื ืืงืื ืขืฆืื ืฉื ืืงืกืืืก ืื ืื ืื. ืืืืจื ืฉืื ืื ื ืืืืขืื ืืืจืืฅ ืืช ืืืืืงืืช ืืืื ืืช ืืช ืืคืจืืืงื ืื ืื ื ืืืงืื ืืื ืืืืื ืก ืืชืืงืืืช lib ืขืฆืื ืืื ืืขื ืืช ืขื ืืฉืืื ืืื ืืขื ืืื ืช ืืืื ืืงืกืืืก - ืืื ืืื ืฉืืื ืืงืฉืืช?
ืืฉืืงืกืืืก ืจืง ื ืืื ืขืืืื ืื ืืื fetch API ืืืคืืคื ืื, ืืืฉืจืฆืื ื ืืืืฆืื ืืงืฉืืช ืจืฉืช ืืื ืฆืจืื ืืืืืจ ืชืืืืจ ืงืฆืช ืืกืืจืื ืฉื XMLHttpRequest - ืืืืช ืฆืจืื ืืืฆืืจ ืืื, ืืืืื ืื ืืื ืืืืช ืืืืื ืคืื ืงืฆืื ืืื ืฆืจืื ืืืคืขืื ืืฉืืกืืื ืืืฉืืื ืืืชื ืืืจืื. ืจืื ืืืชืื ืชืื ืืฉืชืืฉื ื jQuery ืืื ืืขืืืฃ ืืช XMLHttpRequest ืืชืืืืจ ืืืชืจ ืืืืืืชื, ืืืขืฆื ืืฉืืื ืืืจืื ืกืงื ื ืื ืก ืืกืฆืื ื ืืื ืืืื ืฉืื ืืชื ืืฉืชืืฉ ืืจืืืงื ืื ืืชื ืื ืฆืจืื jQuery, ืืื ืฉืื ืืฉืืืจื ืืช jQuery ืจืง ืืฉืืื ืืืชื ืขืืืคื ืงืื ื ื XMLHttpRequest. ืืขืฆื ื jQuery ืืืืืช ืืืชืื:
$.get('/some/url', function(data) {
console.log(data);
});
ืืื ืคืฉืื ืขืื ืืคื ื ื /some/url, ืืืื ืืื ื ืืืืข ืืืจื ืืื ืืฆืืจืช JSON ืืื ืืืฉืื ืืืฆืข ืืช ืืคืื ืงืฆืื ืืคืจืืืจ ืืฉื ื ืขื ืืืืืข ืฉืงืืื.
ื ืชืืื ืืช ืืืกืืื ืฉืื ื ืืืงืกืืืก ืืงืืืฅ ืืจืืฉื ืฉื ืืกืคืจืื lib/axios.js ืืฉื ืื ื ืืืฆื ืืช ืืฉืืจื:
// Expose Axios class to allow class inheritance1 419
ืืืืืจ ืืืงื ืืจืืฅ ืืช ืืืืืงืืช ืืชืืงืืืช
test/unit ืืงืืจืื ืืจืืฅ ืืช ืืืืืงืืช ืืชืืงืืืช test/specs. ืงืืจืื ืืฉืชืืฉ ืืืคืืคื ืื ืืืื ืืืืง ืืช ืืืืง ืฉื ืืืคืืคื ืืงืื ืฉื ืืงืกืืืก, ืืืืงื ืจืฅ ืืชืื node.js ืืืื ืืืืง ืืช ืืืจืฆืืช ืืชืื ืืืฉืื node.
ืืคื ื ืืื ืืกื ืืชืืงืืืช ืืืืืงืืช ื ื ืกื ืืื ืืช ืืช ืืคืจืืืงื ืืื ืืจืืืช ืื ืืืฉืฉ ืฉืื ื dist ืืื ืืืฆืืง. ืื ื ืืคืขืื:
$ npm run build
> axios@0.25.0 build
> NODE_ENV=production grunt build
Running "clean:dist" (clean) task
>> 5 paths cleaned.
Running "webpack" task
Hash: d004b5ae618258baef57
Version: webpack 4.46.0 / grunt-webpack 4.0.3
Time: 275ms
Built at: 01/28/2022 10:40:45 AM
Asset Size Chunks Chunk Names
axios.js 62.3 KiB main [emitted] main
axios.map 67.6 KiB main [emitted] [dev] main
Entrypoint main = axios.js axios.map
[./index.js] 40 bytes {main} [built]
[./lib/adapters/xhr.js] 6.79 KiB {main} [built]
[./lib/axios.js] 1.52 KiB {main} [built]
[./lib/cancel/Cancel.js] 385 bytes {main} [built]
[./lib/cancel/CancelToken.js] 2.41 KiB {main} [built]
[./lib/cancel/isCancel.js] 102 bytes {main} [built]
[./lib/core/Axios.js] 4.14 KiB {main} [built]
[./lib/core/InterceptorManager.js] 1.33 KiB {main} [built]
[./lib/core/mergeConfig.js] 3.12 KiB {main} [built]
[./lib/defaults.js] 3.5 KiB {main} [built]
[./lib/env/data.js] 43 bytes {main} [built]
[./lib/helpers/bind.js] 256 bytes {main} [built]
[./lib/helpers/isAxiosError.js] 373 bytes {main} [built]
[./lib/helpers/spread.js] 564 bytes {main} [built]
[./lib/utils.js] 8.65 KiB {main} [built]
+ 14 hidden modules
Hash: 298941b4c4e5b7c2fd49
Version: webpack 4.46.0 / grunt-webpack 4.0.3
Time: 196ms
Built at: 01/28/2022 10:40:45 AM
Asset Size Chunks Chunk Names
axios.min.js 17.3 KiB 0 [emitted] main
axios.min.map 79.3 KiB 0 [emitted] [dev] main
Entrypoint main = axios.min.js axios.min.map
[0] ./lib/utils.js 8.65 KiB {0} [built]
[1] ./lib/defaults.js 3.5 KiB {0} [built]
[2] ./lib/cancel/Cancel.js 385 bytes {0} [built]
[3] ./lib/helpers/bind.js 256 bytes {0} [built]
[4] ./lib/helpers/buildURL.js 1.61 KiB {0} [built]
[5] ./lib/core/enhanceError.js 1.11 KiB {0} [built]
[8] ./lib/cancel/isCancel.js 102 bytes {0} [built]
[9] ./lib/core/mergeConfig.js 3.12 KiB {0} [built]
[10] ./lib/env/data.js 43 bytes {0} [built]
[11] ./index.js 40 bytes {0} [built]
[12] ./lib/axios.js 1.52 KiB {0} [built]
[13] ./lib/core/Axios.js 4.14 KiB {0} [built]
[26] ./lib/cancel/CancelToken.js 2.41 KiB {0} [built]
[27] ./lib/helpers/spread.js 564 bytes {0} [built]
[28] ./lib/helpers/isAxiosError.js 373 bytes {0} [built]
+ 14 hidden modules
Done.
ืขืืฉื ืจืืฉื ืฉืื ืืฆืืื. ืืขืืฉืื ื ืฉืืื ืขื ืื ืฉืฉืืืจ ืืืื:
~/tmp/axios โฑ master !5 ๎ฐ PAGER=cat git diff --name-only -- dist
dist/axios.js
dist/axios.map
dist/axios.min.js
dist/axios.min.map
ืืื ืื ื ืืืืขืื ืืืขืื ืืจืืฉืื ื ืขื ืืื ื ืืชืืงืืืช: ืื ืฉืืื ืืจืืคื ืชืืงืืืช dist ืืื ืืืืืช ืืืชืืื ืืื ืฉืื ื ืืงืื ืืื ืืืช ืืคืจืืืงื.
## ืืืืงืืช ืืืงื
ื ืืฉืื ืืชืืงืืืช ืืืืืงืืช ืืชืืงืืืช ืืืืืงืืช ืืจืืฉืื ื ืฉืื ื ืจืืฆื ืืงืจืื ืืื ืืชืืงืื test/unit. ืื ื ืืืจ ืืืืข ืฉืืื ืืืืงืืช ืฉืจืฆืืช ืืชืื node.js ืืืื ืืืืฆืขืืช ืืืงื. ืืงืืืฅ ืืืจืืื ืืื ืืื unit/adapters/http.js, ืงืืืฅ ืฉืืืื ืืขื ืืืฃ ืฉืืจืืช ืฉื ืืืืงืืช. ืื ื ืืืืงื ืืืช ืืืืืื ืืื ื:
it('should allow passing JSON', function (done) {
var data = {
firstName: 'Fred',
lastName: 'Flintstone',
emailAddr: 'fred@example.com'
};
server = http.createServer(function (req, res) {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(data));
}).listen(4444, function () {
axios.get('http://localhost:4444/').then(function (res) {
assert.deepEqual(res.data, data);
done();
});
});
});1 419
# ืงืจืืื ืืืืจืืช ืืงืื ืฉื Axios
ืืงืกืืืก ืืืื ืืคืจืืืงื ืฆื ืฉื ืืชืื ืช ืืฉื ืืื ืืืจืืกืงื. ืืื ืืืืืง ืืืื ืืช ืจืืืงื ืืืืื ืืชืืื ืืื ืืืืื ืขืจื ืืืจื ืื ืก JavaScript ืืื ื ืฉืืจ ืืืืื ืืืชืืื ืืืชืื ืกืคืจืืืช http ืืจืืืงื. ืืืจ ืืืื ืืื ืืืื ืฉืืกืคืจืื ืฉืื ืื ืืืืช ืงืฉืืจื ืจืง ืืจืืืงื ื axios ืืคืื ืืกืคืจืืืช ืชืงืฉืืจืช ืื ืจืืช ืืืคืืคื ืื ืื Node.JS.
ืืืื ืืื ืืืจ ืืื ืฉื ืื ืขืืื ืืืคื ืืื ืฉืืชืืืง ืืช Axios ืืื ืืชืื ืช ืืืจ ืืฉื ื'ืืืกืื ืกืืืื. ืืงืกืืืก ืืงืื ืชืจืืืืช ืงืื ืืืืืช ืืชืื ืชืื ืืขืืื ืืขืืื ืขื ืืขื 24 ืืืืืื ืืืจืืืช ืืฉืืืข ื npm.
ืืคืืกื ืืืื ืืกืชืื ืขื ืืืจืืืืงืืืจื ืืืื ื ืืคืจืืืงื ืืื ืืืฉืื ืขื ืจืขืืื ืืช ืืชืจืืืืช ืงืื ืืคืฉืจืืืช.
## ืืื ื ืืชืืงืืืช
ืื ืืงืื ืฉื ืืคืจืืืงื ืืืฉื ืืชืืงืื ืืฉื lib, ืืื ืืคื ื ืฉื ืืื ืก ืืืื ืืขื ืืื ืืจืืืช ืื ืืฉ ืืื ืืชืืงืืืช ืืืืจืืช ืืจืืคื:
1. ืืกืคืจืื ืืจืืฉืื ื ืฉืงืืคืฆืช ืืื ืืขืื ืืื ืืื test. ืื ื ืืืื ืคืจืืืงืืื ืขื ืืืืงืืช ืื ืืืืืงืืช ืื ืฆืขื ืืื ืืื ืืื ืืชืืขืื ืืงืื ืขืฆืื. ืื ืื ืืกืคืจืืช ืื ืืขื ืขื ืืงืื, ืืื ืืืคืฉืจืืช ืืืจืืฅ ืืช ืืงืื ืืกืืืื ืืืืงืจืช.
2. ืืืงืกืืืก, ืืืฅ ืืชืืงืืืช ืืืืืงืืช ืืจืืืื test ืืฉ ืขืื ืฉืชื ืชืืงืืืช ืืฉื sandbox ื examples. ืืืฉืื ืืืื ืืชืืืฅ ืืขืฉืืช ืืืื ืงืืื ืืืชืื ืชืื ืืืจืื ืฉืจืืฆืื ืืืฆืืจืฃ ืืืฉืืง ืขื ืืงืื - ืืื ืขืื ืกืืื ืืื.
3. ืืกืคืจืื dist ืงืฆืช ืืืจืืื. ืื ืื ื ืืกืชืืืื ืขื ืจืืคื ืฉื ืงืื ืืงืืจ, ื dist ืืืืื ืชืืฆืื ืฉื ืื ืื. ืืื ืฆืจืื ืื ืืช dist ืฉื? ืืื ืื ืืชืช ืืื ืฉืื ืืื ืืช ืืื? ืืื ืื ืื ื ืืื ื ืืืชืืฆืื ืื ืชืืื ืืื ืืื ืฉืฉืืืจ ื dist? ืืื ืื ืืื ืืช ืขื Github Action ืืืืขืืืช ืืช ืืชืืฆืื ื Release ืืืืืืื?
4. ืืชืืงืื ืื ืกืชืจืช
.github ืืืืืช ืงืืฆืื ืืืื ืืจืงืฆืื ืขื ืืืืืื. ืืฉ ืฉื ืชืื ืืช ืืคืชืืืช Issue ืืืืชืจ ืืขื ืืื ืืงืืืฅ .github/workflows/ci.yml ืฉืืืื ืืช ืืืืจืืืช ื Github Action ืฉืืจืืฅ ืืช ืืืืืงืืช.
ืืืจื ืกืงืืจืช ืขืฅ ืืชืืงืืืช ืืฆืขื ืืืชืืงืฉ ืืื ืืื ืื ืกืืช ืืืจืืฅ ืืช ืืืืืงืืช ืืื ืกืืช ืืื ืืช ืืช ืืคืจืืืงื ืืื ืืจืืืช ืงืืื ืื ืฉืื ืืืืืงืืช ืขืืืจืืช ืืฉืืื ืื ืฉื ืืืจืกื ื ืงืื ืืืืืืื ืชืืืฆืจ ืืืืืง ืืช ืื ืฉืืืจ ืงืืื ืืชืืงืืืช dist.
ืื ื ืืคืขืื:
$ npm install
ืืื ืืืชืงืื ืืช ืื ืืชืืืืืช, ืืคืืชื ืืช package.json ืืื ืืจืืืช ืืืื ืกืงืจืืคืืื ืืืืื ืฉื:
"scripts": {
"test": "grunt test && dtslint",
"start": "node ./sandbox/server.js",
"build": "NODE_ENV=production grunt build",
"preversion": "grunt version && npm test",
"version": "npm run build && git add -A dist && git add CHANGELOG.md bower.json package.json",
"postversion": "git push && git push --tags",
"examples": "node ./examples/server.js",
"coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
"fix": "eslint --fix lib/**/*.js"
},
ืืฉืื ืื ื ืจืืื ืฉืืคืจืืืงื ืืืื ืืืืืืชื ืืืชืื ืชืื ืืืฉืื. ื ืืื ืื ืืฉืชืืฉืื ื grunt ืืื ืืืื ื ืฆืืื ืืืชืืืง ืืงืจืืืช ื Gruntfile. ืืจืฆืช ืืืืืงืืช ืขื:
$ npm run test
ืขืืืืช ืืื ื ืฉื ืื ืฉืืจืืฆื ืฉื ื ืกืืืื ืฉื ืืืืงืืช - ืืืืืง ืืจืืฉืื ืืื ืืืืง ืฉื ืืืืงืืช mocha ืฉืจืฆืืช ืืชืื node.js, ืืืืืืง ืืฉื ื ืืื ืืืืง ืฉื ืืืืงืืช karma ืฉืจืฆืืช ืืชืื ืืคืืคื ืื. ืืื ืืคืืื ืืืชื ืื ืืืื ืืคืืคื ืื ืืื ืืจืืฅ:
28 01 2022 10:34:29.443:INFO [karma-server]: Karma v6.3.11 server started at http://localhost:9876/
28 01 2022 10:34:29.444:INFO [launcher]: Launching browsers FirefoxHeadless, ChromeHeadless with concurrency unlimited
ืืื ื ืืจืืข ืฉืืฉืฉืชื ืืื ื - ืืืื ืฉืืฉ ืฉื ื ืกืืื ืืืืงืืช ืืฉื ื ืืืื ืฉืื ืื ืฉืืจืืฆืื ืืืชื, ืืื ื ืจืืฆื ืืืขืช ืืืื ืืืืงืืช ืงืฉืืจืืช ืืืืื ืืื, ืื ื ื ืืืฅ ืืคืชืื ืืช ื Gruntfile. ืืืืืง ืฉืืขื ืืื ืืืชื ื ืืื ื ืืื:
karma: {
options: {
configFile: 'karma.conf.js'
},
single: {
singleRun: true
},
continuous: {
singleRun: false
}
},
mochaTest: {
test: {
src: ['test/unit/**/*.js']
},
options: {
timeout: 30000
}
},
ืืืงืื ืื ืืืงื ืืจืืฅ ืืช ืืืืืงืืช ืืชืืงืืืช test/unit ืืงืืจืื ืืจืืฅ ... ืื ืืฉ ืื ืื ืงืืืฅ ืงืื ืคืืืืจืฆืื ืืฉืื. ื ืืฉืื ืืคืชืื ืืช karma.conf.js ืืฉื ื ืืฆื ืืช ืืืืืง:
preprocessors: {
'test/specs/__helpers.js': ['webpack', 'sourcemap'],
'test/specs/**/*.spec.js': ['webpack', 'sourcemap']
},1 419
# ืื ืืืืืงืืช ืฉืืขืืื
ืื ืืชืืช ืงืืืคืื ื ืืช ืจืืืงื ืืงืืืฅ ืืืืงืืช ืขืืืจื, ืืขืืืื ืืฉ ืืืืื, ืื ืืืืจ ืฉ-
1. ืื ืืชืืช ืืืืงืืช ืืกืคืืง ืืืืืช?
2. ืื ืืชืืช ืืกืคืืง ืืืืงืืช?
3. ืืฉ ืืืืื ืฉืืืืงืืช ืื ืืืืืืช ืืืชืจ?
4. ืืชืืืช ืืืืงืืช ืื ืฉืืื ืืช ืืืื ืฉืื?
ืืฃ ืชืฉืืื ืืื ืืื ืื ืืืช ืืืืืืช. ืืื ืืกื ืืื 4 ืืืฉืืช. ืื ืฉืืืืจ ืืืืฉื ืืจืืฉืื ื ืืืฉืื ืืฉืคืจ ืืช ืืืืืงืืช ืขื ืื ืืื ืขื ืฉืืืื ืืืชืื ืืืืงืืช ืืืืืช ืืืชืจ; ืื ืฉืืืืจ ืืืืฉื ืืฉื ืื ืืืชื ืขืื ืืขืื ืืืืงืืช ืขื ืฉืืฆืืื ืืชืคืืก ืืช ืื ืืืงืจืื; ืื ืฉืืืงื ืืช ืืืืฉื ืืฉืืืฉืืช ืืขืืืจ ืืืจ ืืืืืงื ื jest ืืืืืงื ืืืคืืคื ืืืืชื ืื ืืคืืื ืืคืจืืืงืฉื; ืืื ืฉืืืืจ ืืช ืืืืฉื ืืจืืืขืืช ืืืขื ืืื ืืฉืงืืข ืืจืืฉ ืืื ืืืชืืืช ืืืืงืืช ืื ืืื ืืืช ืืชืฉืชืืช.
ืืื, ืื ืืชืฉืืื ืฉืืื ืื ืืืืืื ืืืชืืืช ืืงืื ืฉืืชื ืจืืฆืื ืืืชืจ ืื ืกืืช ืื ืืืฉื ืืืจืช.
1 419
# ืืืื ืืืืชื: ืืฉืชื ืื ืืืืืืืืื ื node.js
ืคืืฆ'ืจ ืฉืืฃ ืคืขื ืื ืืฉืืชื ืฉืืฆืืจื ื Node.JS ืืื ืืืฉืชื ื ืืืืืื global. ืืื window ืืืคืืคื, global ืืื ืืืืืืงื ืฉ node ืืืื ืืืื ืืฉืคื ืืชื ืืืฉืชื ื ืืื node ืื ืืฆืืื ืืืฆืื ืืช ืืืฉืชื ื ืืื ืืฉืื ืืงืื. ืขื global ืื ืื ื ื ืืื ืืืฆืื ืืช ืืืืจืื ืืืืืืืืืื ืฉื ื ืื ืืื setTimeout, clearTimeout ืืืืืื ืื ืืช global ืขืฆืื.
ืืขืืจืช global ืื ืื ื ืืืืืื ืืฉืชืื ืืฉืชื ื ืืืืืืื ืืงืืืฅ ืืืจ. ืืืืืื ื ื ืื ืฉืืฉ ืื ืงืืืฅ ืืฉื b.js ืขื ืืชืืื ืืื:
console.log(foo);
ืื ืืจืืจ ืฉืื ื ื ืกื ืืืจืืฅ ืืฉืืจืืช ืืช b.js ื ืงืื ืฉืืืื ืื foo ืืื ื ืืฉืชื ื ืืืืืจ. ืืื ืืืงืื ืืืจืืฅ ืืช b.js ืื ื ืืืื ืืืชืื ืงืืืฅ ืืืฉ ืืฉื a.js ืืืืืื ืขื ืืชืืื ืืื:
global.foo = 10;
const b = require('./b.js');
ืืขืืฉืื ืืฉืื ื ืืจืืฅ ืืช a.js ืืื ืืืขื ืืช b.js ื b ืืืจ ืืืฆื ืืช ืืืฉืชื ื foo ืื ืืื ืืืืืจ ืขื global ืืงืืืฅ a.
ื .ื. ืืชื ื ืจืฆื ืืืฉืชืืฉ ื global ืืชื ืฉืืืืื? ืืืืื ืืฃ ืคืขื. ืืงืื ืืืืื ื ืฉืืชื ืฆืจืืืื ืืืจืืฅ ืืืืงืืช ืขื react-testing-library ืืชืื ืกืืืืช node.js, ืืืฉื ื jest ืื mocha. ืืืืื ื ืื ืฉืืืืฉืื ืฉืืื ืืืขื ืืืื ืงืืืฅ ืฉืืืชืื ืืจืืฆื ืืืคืืคื ืื ืืื ืืฉืชืืฉ ืืืืืฉืื ืืืืืงื ืืืืืืื ืืื window, fetch ืื IntersectionObserver (ืื ืืฉ ืืืจ ืืื). ืขืืฉืื ืืฉืืื ืืืจืืฅ ืืช ืืืืืงื ืขื ืืืืฉืื ืฉืืื ืืชื ืฆืจืืืื ืฉืืืชื ืงืืืฅ ืืฆืืื ืืืฆืื ืืช ื window ืื ื fetch ืืืืืืืืืื.
ืืกืคืจืื node-window-polyfill ืืกืคืงืช ืืืืื ืืฉืืืืฉ ืืื ื global ืืื ืืืืฆืจ ืืฉืชื ื window ืฉืืืื ืืืืจื. ืื ื ืกื ืืคื ืืื ื ืฉืืืืืฉ ืืช ืื ืงืืื:
var globalObject = global;
var registerWindow = function () {
globalObject.window = globalObject.window || {};
exports.registerWindowProperties();
};
ืืืจื import ืืกืคืจืื ืื ืืคืฉืจ ืืืชืืื ืืืขืื ืงืืฆื ืงืื ืฉื ืืชืื ืืืคืืคื ืืืืคืฉืื ืืืืืงื window, ืื ืื ืืืฆืื ืืช ืืืืืืงื ืขื ืื ืืืืคืืื ืื ืฉืื ืฆืืคื ืืื.1 419
# ืฉื ื ืฉืืืืฉืื ืืืืื ืืื ื git stash
ืืจืื ืืื ืื ืืื ืชื ืืช git stash. ืืจื ืืื ืืืจืืง ืืช ืื ืืฉืื ืืืื ืฉืื ื stash ืืฉืื ื ืืืื ืืขืฉืืช ืืื ืงืืืื ื branch ืืื ื ืืืฉ? ืื ืื ื ืืจืืืื ืืืฉืื ืืืชื ืืืงืื ืฉืื ืจืง ืืืื ืื ืืืชืจ ืงืฉื ืืืฆืื ืืืชื?
ืื ืื ืื ืืชื ืื ืืืืฉืชืืฉืื ืืืืืื ืฉื ืืื ืกืืืฉ ืื ื ืฉื ื ืืฆืืื ืฉืืื ืื ืืืื ืืืืืจ ืืืชื ืืืืฉืชืืฉ ืื-
## ืื ืืคืจืืืงื ืืืืืจ commit hook
ืื ื ืืืืข, ืงืืืื ืืืงืก ืื ืืฉืืืื ืืื ืืืืื ืฉืืงืื ืขืืื ืืื ืฉืฆืจืื ืื ืื ืืื ื ืืืจืื ืืืื, ืืื ืืคืขืืื ืื ืืืืืื ืืืืืช ืืืื ืืฆืืงืื - ืืืฉื ืื ืืฉ ืื ืงืืืื ืืืง ืฉืืืืื ืฉืืงืื ืขืืืจ eslint, ืืืฆืื ืืงืื ืขืืืื ืื ืขืืืจ eslint ืืื ืืื ืืืช ืฆืจืื ืืฉืื ืืืชื ืืฆื, ืื ืื ื ืืืจ ืื ืืืื ืืขืฉืืช ืงืืืื ื branch ืืื ื ืืืืืช ืืขืฉืืช ืืืจืื ืืืจืื ืื ื commit hook ืืืกืื ืืืชื.
ืืืฆืืื ืืืื stash ืืื ืคืืชืจืื ืืขืืื ืื ืืื ืืืื ืขื pre-commit hook. ืื ืื ื ืืืจืงืื ืืช ืืฉืื ืืืื ื stash ืขื:
$ git stash -u
ืืงืืืื ืชืืงืืืช ืขืืืื ื ืงืื, ืืืืืื ืืชืงื ืืื ืื ืืขืืื ืขื ืคืืฆ'ืจ ืืืจ, ืืืฉืจืืฆืื ืืืืืจ ืืืืคื ืฉืืืื ื ืืคืขืืืื:
$ git stash pop --index
ืืืชื -u ืืืจื ืืฉืืืืช ืื ืืงืืฆืื ื stash ืืืื ืืื ืฉืขืืืื ืื ืืชืืืกืคื ืืืื, ืืืืชื --index ืืืจื pop ืืืจื ืืฉืืืืืจ ืื ืฉื ื Staging Area ืื ืฉืื ืขืฉืืชื add ืืืื ืงืืฆืื ืื ืืืจื ืืืืจื ืื stash ืื ืชืฆืืจืื ืืขืฉืืช ืืื add ืฉืื.
## ืื ืืฉ ืื ืงืืืฅ ืืืื ืืชืืงืื
ืืืช ืืืขืืืช ืขื ืงืืืืืื ืืื ืฉืื ื ืฉืืจืื ืื ืฆื. ืื ืื ืืงืืชื ืืื ืฉืื ืืืื ืืืฆืจืชื ืืื ืงืืืื ืืืฉ ืืขื ืฃ ืืืฉ (ืืื ื ืชืืฃ ืืืืง ืืืชื), ืืื ื ืืืื ืืช ืืขื ืฃ ืืืืฉ ื main ืืื ืืืืฉืื ืืขืืื, ืื ืื ืืงืืฆืื ืฉืืื ืืืืืกืื ื"ืืื ื" ืืืฉืืจื ืืืืืจ ืืืื ืื ืฆื.
ืืืืืื ืืืจืืช ื ื ืื ืฉืกืืืืก ื ืืชื ืื ืืช ืืกืืืืืฆืื ืืืื:
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: src/App.js
Untracked files:
(use "git add <file>..." to include in what will be committed)
buggy-data.db
ืืงืืืฅ buggy-data.db ืืืืฆื dump ืฉื ืืกืืก ืื ืชืื ืื ืขื ืืืืข ืฉืืืจื ืืืื ืืืขืจืืช ืฉืื ืืื ื ืื ืกื ืืชืงื ืืืชื. ืื ืงืืืฅ ืืื ืืจื ืืืื ืืื ื ืฆืจืื ืืืชื ืจืง ืืฉืืื ืืืืืงืืช ืืืชืืงืื ืื. ืืืืฆืข ืืขืืืื ืื ื ืฆืจืื ืืขืืืจ ืืขืืื ืขื ืคืืฆ'ืจ ืื ืืื ืืืจ.
ืื ืื ื ืขืืฉืื ืืืฆืจ ืงืืืื ืืืฉ ืืขื ืฃ ืืืฉ ืืฆืืจื ืืชืืงืื ืืืื ืืก ืืืื ืื ืืช buggy-data.db, ืงืืืฅ ืื ืืืืืฃ ืืฉืจืช ืืืจืืื ืืคืขื ืืืื ืฉืืขืฉื push ืืืืฉืืจ ืืืืืจ ืืืื ืื ืฆื. ืื ืื ื ืืืืชืจ ืขื buggy-data.db ืืงืืืื ืืืื ื ืืืฉืืืจ ืืืชื ืคืฉืื ืืชืืงืืืช ืืขืืืื ืืื ืขืืื ืืืคืจืืข ืื ืืชืืงืื ืืืื ืืขื ืฃ ืืืืฉ. ืื ื ืืืื ืืืื ืืก ืืืชื ื .gitignore ืืื ืื ืืืื ืฉืื ื ืจืืฆื ืืฉื ืืช ืืช gitignore ืืฉืืื ืืฉืื ืื ืื ืืื ื.
ืกืืืฉ ืฉืื ืืกืชืื ืืชืืจ ืืคืืชืจืื ืืงื ืืืฆื ืืื. ืืคืขืืืื:
$ git stash -u
ืืืงืืืฅ ืืืืื ื ืขืื ืืกืืืฉ ืืื ืขื ืืฉืื ืื ืฉืืชืืืชื ืืขืฉืืช. ืืคืขืื ืขืชืืืืช ืฉื git push ืื ืชืฉืื ืืช ืืงืืืฅ ืืืืื ืืืืืจ ืืืจืืื ืืืืคืขืื ืขืชืืืืช ืฉื gc ืืื ืืืืืง ืืชืืงืืืช .git, ืื ืื ืจืืฆืื ืืื ืืืจื ื git stash pop ืืืืืง ืืืชื ืืคืฉืจ ืืืจืืฅ:
git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c gc.pruneExpire=now gc
ืืืืจืื ืขืื ืืงืจืื ืฉืืื git stash ืืื ืืคืืชืจืื ืืืื ืืืืชืจ? ืืืืื ืื ืืฉืชืฃ ืืชืืืืืช.1 419
ืืืจื ืฉืืืงื ื ืืช ืื ืืืืงืื ืืื ืจืืื ืืืืฉืื ืื ืื ื ืืืืืื ืืืืฉืื ืืืืืงืช ืืกืืืื ืงืื ืืืืชืืื, ืืืื ืืืื ืืืชืืงื ืืืกืืืื ืงืื ืฉืืืจืฉืื ืืื ื ืืืืืืช ืื ืฉืงืฉืื ืืืืืื ืืืืืงื. ืืืืจื ืฉืื ืฉื ื QA ืฉืืื ืืืืขืื ืืืฉืชืืฉ ืืืื ืืืืงืืช ืืืืืืืืื ืืื ืกืื ืืื. ืื ืฉืื ืื ืืืืขืื ืื ืืื ืืงืื ืื ืื ืืื ืขืืื ืืฉืืืจ ืืืชื, ืืืื ืื ืืชื ืืืืขืื ืฉืื ืื ืื ืืกืืื ืืฉืชืืฉ ื Cookies ืื ืืชื ืืืืืื ืืืชืื ืืืืงื ืฉืืืืืจื ืืจืืฉ ืขืจืืื ืืกืืืืื ืืืืชื Cookies, ืืคืืื ืขืจืืื ืื ืืืืื ืืื, ืืืจืืืช ืฉืืืืขืืช ืืฉืืืื ืืืฆืืืช ืืื ืฉืฆืจืื. ืื ืฉื ื QA ืืขืืื ืื ืืืืขื ืืืกืืื ืืื ืื ืื ืืืืงืื ืจืง ืืืจืื ืฉืืฉืชืืฉืื ืืืืืื ืืืืืข ืืืืื ืืขืืืื ืจืืืื ืขื ืืืขืจืืช.
ืื ืื ืืชื ืืืืขืื ืฉืืงืื ืฉืืื ืืืฆืข ืืืืืื ืขื ืงืื ืฆื ืฉืจืช ืืชื ืืืืืื ืืืฉืชืืฉ ื mock ืืื ืืืจืื ืืฉืจืช ืืืืืืจ ืงืืืื ืืกืืืืื ืฉืืื ืฉืืชื ืืืืขืื ืฉืืฉ ืืืชื ืืขืื ืื ืืืืืฃ ืืืืืืช ืืืืืคืช ืืคื ื ืืชืฉืืื ืืืืืชืืช ืืืฉืจืช, ืืืืืื ืฉืืงืืืคืื ื ืืืช ืฉืืื ืืืคืืืช ืืื ืฉืฆืจืื ืืืขืืืช. ืืื ืืขื ืืืืื ืืช ืืืื ืขื ืืืจืื ืฉืื ืฉื ื QA ืืืฆืื, ืืื ืืฉ ืืืื ืืืจืื ืืฆืืจืชืืื ืฉืืฉืชืืฉืื ืืขืืื ืื ืืืืขื ืืืืื ืืืืื ืขืืืื ืชืงืื ืืื ืื ืื ืืงืจื ืืื ืคืขื ืืืืื ืืืืืช ืืืื ืื.
ืืืืงืืช ื ืืกืคืืช ืฉืฉืืื ืืืืกืืฃ ืืงืืืืจืื ืื ืืื ืืืืงืืช ืฉืืืจืฉืืช ืืจืื Data ืฉืืืื ืื ืงืืื ืืกืืืืช ืืืืืงืืช. ืื ืื ืืชื ืงืืืคืื ื ืื ืฉื ืืืื ืชืืืื ืืืืืง ืืื ืืื ืืชื ืืืช ืื ืฆืจืื ืืืฆืื ืขืฉืจืืช ืืืคื ืฉืืจืืช, ืืคืืื ืฉืืจืื ืืืฉืชืืฉืื ืฉืืื ืืืื ืจืง ืืื ืืืืช ืฉืืจืืช.
1 419
# ืืจืืขื ืกืืืื ืฉื ืืืืงืืช ืฉืืืื ืืืชืื
ืืฉืืืข ืฉืขืืจ ืืฆืขืชื ืืื ืืื ืจืขืืื ืืช ืืกืืื ืืืืงืืช ืฉืืชื ืืืืืื ืืืชืื, ืืืชืืืื ืืืืชื ืคืืกื ืืื ืงืืจืืื ืจืฆื ืืืขืช ืื ืจืง ืืืื ืืืืงืืช ืืคืฉืจ ืืืชืื, ืืื ืืืื ืืืืงืืช ืืืื ืืืชืื. ืื ืื ื ืืจืฉืืื ืฉืื ืฉื ืืจืืขื ืกืืื ืืืืงืืช ืืืืฉืืื ืจืืืงื ืฉื ืืชื ืืช ืืื ืืจืื ืขืจื ืืืคืชืืื ืฉืืืชืืื ืืืชื:
## ืืืืงืช Utility Functions ืื ืจืืืช
ืื ืคืื ืงืฆืื ืืืืจื ืฉืื ืื ื ืขืืฉืื ืื export ืืืืืฉืื ืงืืืฅ ืชืจืืืื ืืืชืืืช ืกื ืืืืงืืช ืืงืืฃ ืื ืืกืฃ ืืชืืขืื (ืืืคืขืืื ืืคืืื ืืืงืืื). ืืืืื ืช ืืขืืืช ืืชืืืช ืืืืงืืช ืืคืื ืงืฆืื ืืืืจื ืื ืืืฉ ืคืฉืื ืื ืืื ืืืฉืคืขืช ืจืง ืืืงืืืื ืฉืืื ืืงืืืช; ืืืืื ืช ืืชืืขืืช ืคืื ืงืฆืื ืฉืขืืฉืื ืื export ืื ืคืื ืงืฆืื ืฉืืฉืชืืฉืื ืื ืืืื ืืงืืืืช ืืืขืจืืช ืืืื ืฉืืขืืืจ ืืืื ืืฉืชืืฉื ืื ืืืืชืจ ืืงืืืืช. ืืื ืืืืืง ืืคืื ืงืฆืืืช ืฉืฉืืจืืืช ืืื ืืจืื ืืื ืืงืื, ืืฉืืื ืืคืืื ืืฉื ืืช ืืืชื ืื ืื ืื ื ืื ืืืืขืื ืืืื Use Case ืืืืจ ืื ืื ื ืฉืืืจืื. ืกื ืืืืงืืช ืืฉืืขืืชื ืขื ืคืื ืงืฆืืืช ืืืื ืืืืื ืื ื ืฉืื ืฉืื ืื ืืืงื ืืืฉืืื ืืช ืื ืืืงืจืื ืืืฉืืืื ืฉืืื ืืขืืจ. ืืืืืื ืจืืฉ ืื ืืงืคืืื ืืืืกืืฃ ืืืืงืืช ืื ืคืขื ืฉืขืืฉืื ืฉืื ืื ืืืืืช ืคืื ืงืฆืื, ืืื ืืืืื ืฉืฉืื ืฉืื ืื ืขืชืืื ืื ืืืจืืก ืืช ืืฉืื ืื ืื ืืชืืงืื ืฉืื ืื ื ืืื ืืกืื.
ืืืืื ืืืื ืืื ืืกืคืจืื lodash ืฉืืืืืช ืื ืืกืฃ ืืื ืงืืฆื ืืืงืืจ ืื ืชืืงืืืช test ืฉืืืืื ืงืืืฅ ืืืืงื ืฉืืชืืื ืืื ืงืืืฅ ืืงืืจ. ืจืฆืื ืืจืืืช ืืช ืืืืืงืืช ืฉืืื ืืื:
https://github.com/lodash/lodash/tree/master/test.
## ืืืืงืช ืงืืืคืื ื ืืืช ืื ืจืืืช
ืืฉืืืขืจืืช ืืกืคืืง ืืืืื ืืื ืืื ืืืื ืื ื ืจืืืื UI ืฉืื ืื ืกืื ืฉื Utility Functions - ืืืืืื ืจืืื ืฉื Dropdown, ืจืืื ืฉื ืฉืืจื ืืืืคืก ืื ืืืื ืืืื Spinner ืืืืื ืฉืืชืืื ืืืืืง ืืขืืฆืื ืฉืื ื. ืืืืงื ืืงืืืคืื ื ืืืช ืืืชืจ ืงืฉื ืืืชืื ืืืฉืจ ืืืืงื ืืคืื ืงืฆืื ืืืืจื, ืืื ืืืืจ ืืืงืืืคืื ื ืืืช ืื ืื ืจืืืช ืืืฉืชืืฉืื ืืื ืืืจืื ืืงืืืืช ืืืขืจืืช ืืืืืงื ืฉืืื ืขืืืื ืฉืืื ืืช ืืืฉืงืขื.
ืืืื ืืืืืง ืืื ืฉืืืชืจ ืงืืืื ืืขืจืืื ืฉืื ืื ื props ืฉื ืืงืืืคืื ื ืื, ืืื ืืื ืืกืชืืืช ืื ืขื context ืื ืืืขืืืจ ืืื ืฉืืืชืจ ืืคืฉืจืืืืช ืืขืจืืื ืฉื. ืืืืจื ืฉืืื ืืื ืืื ืืช ืืืื ืกืืื ืืืืฉืง ืืืคืืฆ'ืจืื ืื ืืืืืื ืื ืฉืืฉืืฉืื ืืืฉืืจ ืืชื ืชืืขื ืืคื ื ื QA.
## ืืืืงืช Custom Hooks
ืื ืื ื ืขืืืื ืืืืืจ ืืื ืจื ืฉืืฉืชืืฉืื ืื ืืืจืื ืืงืืืืช ืืืขืจืืช ืืื ืขืืฉืื ืืืืืจ ืขืืื ืืขืื ืืืจืื. ื ืืื, ืืฉ Custom Hooks ืืืื ืคืฉืืืื ืฉืืืืืื ืจืง ืืืืืงื ืืื ืืืื ืื ืืฉ ืืื ืืืื, ืืื ืืจืื Custom Hooks ืืืืืื ืืื ืืจืงืฆืื ืขื ืจืืืืื ืืืฆืื ืืื ืืฉืืืืฉ ืืืคืงืืื.
ืงืื ืืืืืื ืืช useCookies ืืืง ืฉืืืคืฉืจ ืืงืืืคืื ื ืื ืืงืจืื ืืืืข ื Cookies. ืืฉ ืืื ืงืืืฅ ืืืืงื ืื ืืงืืฃ ืืื: https://github.com/reactivestack/cookies/blob/master/packages/react-cookie/src/__tests__/useCookies-test.js. ืื ื ืืืืื ืืืืืงื ืืื ื:
it('update when a cookie change', () => {
const cookies = new Cookies();
const node = document.createElement('div');
const toRender = (
<CookiesProvider cookies={cookies}>
<TestComponent />
</CookiesProvider>
);
act(() => {
cookies.set('test', 'big fat cat Pacman');
ReactDOM.render(toRender, node);
});
expect(node.innerHTML).toContain('big fat cat Pacman');
act(() => {
cookies.set('test', 'mean lean cat Suki');
ReactDOM.render(toRender, node);
});
expect(node.innerHTML).toContain('mean lean cat Suki');
});
ืืืช ืืืจ ืืืืงื ืฉืืืชืจ ืงืฉื ืืืชืื ืืืฉืจ ืืืืงืช ืงืืืคืื ื ืื ืจืืืื, ืืืืืื ืืืชืจ ืงืฉื ืืืชืื ืืืฉืจ ืืืืงื ืฉื Pure Function. ืืืจืืช ืืงืืฉื ืืืืงืช Custom Hooks ื ืืชื ืช ืขืจื ืื ืื ืืฉืื ืฉืืฉืชืืฉืื ืื ืืืจืื ืืงืืืืช ืืืขืจืืช ืืืฉืืฉ ืขืืื ืกื ืืงืืฃ ืฉื ืืืืงืืช ืืืืื ืื ืื ื ืืจืืืฉืื ืืืชืจ ืื ืื ืืฉื ืืช ืืืชื.
## ืืกืืืื ืงืื ืฉืงืฉื ืืืืืข ืืืืื ืืืจืช1 419
> make the third argument work
ืืกืชืืจ ืฉืืืืจืกื ืงืืืืช ืฉื ืืคืื ืงืฆืื ืื ืืืคืืข ืื:
ch || (ch = ' ');
ืจืืืื ืืช ืืืขืื? ืื ืขืืืื ืื ืชืฉืืื ืืืขืช ืฉ Steve Mao ืืืกืืฃ ืื ืืืืงื ืืื ืืืจืืืช ืืืคื ืืืืืง ืืงืื ืืงืืื ื ืืฉื:
assert.strictEqual(leftpad(1, 2, 0), '01');
ืขืืฉืื ืื ืืจืืจ! ืขืจื ืืจืืจืช ืืืืื ืืื ืืฉืืืืฉ ืืื ืืฆื ืื ch ืืื false, ืืื ืืืื ืืช ืืืฆื ืื ืืื ืงืืื ืืช ืืขืจื 0. ืืฉืื ืื ืฉื ืกืืื ืืื ืืื ืฉืืืคืฉืจ ืืคืื ืงืฆืื ืืืคื ืื ืืจืืคืื ืืกืคืจื ืืืงืื ืืช ืืขืจื 0 ืืชืืจ ืชื ืืจืืคืื ืืฉืืื.
ืกื ืืื ืืืืจืกื ืืขืืื ืืช ืฉื ืืคืื ืงืฆืื ืืื ืืืื ืืขื ืืื ืช ืืืืืืช ืื ืืืคืื ืืืงืจื ืงืฆื ืืืืื ืช ืคืจืืืจืื, ืื ืืืคืืืืืืฆืื ืืืงืจืื ื ืคืืฆืื ืืืืฆืขืืช cache ืืื ืืืืืจืืชื ืืื ืฉืืฆืืื ืืขืฉืืช ืืช ืืืชื ืขืืืื ืืคืืืช ืืื ืืขืื. ืืื ืจืง ืฉืืื ืงืฆืจ ืืืจื ืฉืคืืจืกืื ืืืชื ืคืื ืงืฆืื ื ืื ืกื ืืชืืจ ืชืืกืคืช ืืืื ืืช ืืืคืืคื ืื ืืืขืช ืืื ืฆืืจื ืืืฉืชืืฉ ืื ืืกืคืจืื ืืืฆืื ืืช.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
