Same as the Number.POSITIVE_INFINITY property.
There are two infinity types in JavaScript: Number.POSITIVE_INFINITY (Infinity) and Number.NEGATIVE_INFINITY (-Infinity).
The value of a number is Infinity if it is greater than the Number.MAX_VALUE constant (a bit less than 2^1024).
The value of a number is -Infinity if it is less than the -1 * Number.MAX_VALUE constant (a bit more than -1 * 2^1024).
The Infinity property behaves like the infinity in Mathematics.
Any number added to Infinity is also Infinity.
Any number added to -Infinity is also -Infinity.
Any number except 0 multiplied by Infinity is also Infinity.
Any number except 0 multiplied by -Infinity is also -Infinity.
Infinity is greater than any number, while -Infinity is less than any number.
You can use the isFinite global method to check the finiteness of a number.
Note: it does not mean that JavaScript can work with numbers between (-1 * Number.MAX_VALUE, Number.MAX_VALUE) correctly. In a 32-bit system, the real limit is (-1 * 2^53, 2^53). See Example 1 for details.
Same as the Number.NaN property.
The NaN property is a constant value that indicates that the value of an expression is 'Not-A-Number'.
You can use the isNaN global method to check if a value is NaN.
If a method (such as parseFloat, parseInt) returns NaN, it means that the specified parameter cannot be parsed as a number.
The following expressions also return NaN: 0/0, Infinity - Infinity, Infinity * 0, Infinity / Infinity. See Example 1 for details.
Encodes any string to a valid Uniform Resource Identifier (URI).
Encoding is necessary if you want to use a string as a URI, such as a Web page address.
Characters - other than Latin alphanumeric characters and the following ones: !#$&'()*+,-./:;=?@_ - are changed to their hexadecimal representations (%XX, where XX is the hexadecimal character code of the character, such as %20 is a space) during the conversion.
Note that the encodeURIComponent method is similar to the encodeURI method, the only difference is that the encodeURIComponent method also encodes the #$&+,/:;=?@ characters.
If a string contains a complete URL and you need to convert it to a valid URI, use the encodeURI method.
If you want to create the query part of an URL or the body of an HTTP request, use the encodeURIComponent method on the components.
The encodeURIComponent method is most often used for AJAX form submit.
If you need to decode a string encoded with the encodeURI method, use the decodeURI method.
URIString
Required. Specifies a complete Uniform Resource Identifier.
Encodes a string to a valid Uniform Resource Identifier (URI) component.
Encoding is necessary if you want to use a string as a component of a query part of an URL.
Characters - other than Latin alphanumeric characters and the following ones: !'()*-._ - are changed to their hexadecimal representations (%XX, where XX is the hexadecimal character code of the character, such as %20 is a space) during the conversion,
so that it can be passed from one place to another like form data.
Note that the encodeURI method is similar to the encodeURIComponent method, the only difference is that the encodeURI method does not encodes the #$&+,/:;=?@ characters.
If a string contains a complete URL and you need to convert it to a valid URI, use the encodeURI method.
If you want to create the query part of an URL or the body of an HTTP request, use the encodeURIComponent method on the components.
The encodeURIComponent method is most often used for AJAX form submit.
See Example 5 and 6 for details.
If you need to decode a string encoded with the encodeURIComponent method, use the decodeURIComponent method.
Returns the given string in Unicode format. All characters are replaced by their hexadecimal representations (%XX, where XX is the hexadecimal character code of the character, such as %20 is a space), except Latin alphanumeric characters and the following ones: *+-./@_.
Since the escape method does not handle non-ASCII characters correctly, avoid the use of it.
If you need to decode a string encoded with the escape method, use the unescape method.
Evaluates and executes the given string of JavaScript code.
Try to avoid the use of the eval method!
The code passed to eval is interpreted in the context of the call to eval so the surrounding code must be interpreted by the browser at runtime.
In most cases, eval is unnecessary, but if there is no other solution, use the Function object instead, it is much more faster than eval, because it executes the code within the function and the JavaScript compiler can optimise the surrounding context.
See Example 7 - 10 for details.
codeString
Required. String that specifies the code to execute.
Converts the given string to a floating point number. The base is always decimal.
The parseFloat method converts the longest prefix of the specified string to a number that can be successfully parsed.
Leading whitespaces are allowed, exponential notations are supported. If the given string is empty or its first non-whitespace character is not a digit, a decimal point or a plus or minus sign, the parseFloat method returns NaN.
numString
Required. The string to convert.
Note that the Number object provides similar functionality.
Converts the given string of the specified base to an integer.
The parseInt method converts the longest prefix of the specified string to an integer that can be successfully parsed.
Leading whitespaces are allowed. If the given string is empty or its first non-whitespace character is not a digit or a plus or minus sign, the parseInt method returns NaN.
Be careful about the parseInt method! If the radix parameter is not specified, the parseInt method automatically detects the base.
If the string starts with "0x" or "0X", the base is hexadecimal. If the string starts with "0" and the next character is neither "x" nor "X", the base is octal.
In other cases, the base is decimal.
Also see Example 3 and 4 below.
If you need to convert a number to a string that represents the number in the specified base, use the toString method of the Number object.
numString
Required. The string to convert.
radix
Optional. Specifies the binary (2), octal (8), decimal (10), hexadecimal (16) or other (2-36) base, from which the given string should be converted to a decimal integer. If not specified, the parseInt method automatically detects the base.
The maximum base is 36. The numerals in base of 36 are: 0-9 and a-z.
Note that the Number object and the parseFloat method together with the ceil, floor and round methods provide similar functionality.
// use the undefined global property for checking
if (x === undefined)
document.write ("x is undefined <br />");
elsedocument.write ("x is defined <br />");
// use the typeof operator for checking
if (typeof x == 'undefined')
document.write ("x is undefined <br />");
elsedocument.write ("x is defined <br />");
var x; // declare x without a value
// use the undefined global property for checking
if (x === undefined)
document.write ("x is undefined <br />");
elsedocument.write ("x is defined <br />");
// use the typeof operator for checking
if (typeof x == 'undefined')
document.write ("x is undefined <br />");
elsedocument.write ("x is defined <br />");
x = 2; // x has a value
// use the undefined global property for checking
if (x === undefined)
document.write ("x is undefined <br />");
elsedocument.write ("x is defined <br />");
// use the typeof operator for checking
if (typeof x == 'undefined')
document.write ("x is undefined <br />");
elsedocument.write ("x is defined <br />");
If the second parameter (radix) is not specified, the parseInt method automatically detects the base.
In some cases, it returns unexpected result (for details, see the parseInt method):
// hexadecimal
parseInt ("10"); // return 10
// octal
parseInt ("010"); // return 8
// octal, 8 is not a valid octal digit
parseInt ("08"); // return 0
// octal, 9 is not a valid octal digit
parseInt ("09"); // return 0
This example uses the encodeURIComponent method to encode form data before submitting.
This example and the next one use AJAX to submit a form without reloading the page. The two examples are similar, but the first one uses synchronous while the second one uses asynchronous data transfer. In synchronous mode, the send method of the XMLHttpRequest object waits for a reply, so the user cannot interact with the browser until the response has completed. In asynchronous mode, the send method does not wait for a reply but instead returns immediately, so it allows you to perform other operations while a time-consuming task is being performed in the background.
Code
ajax_form.js
register.php
<head><scripttype="text/javascript"src="ajax_form.js"></script><style>.error {
display: none;
color: #a00000;
font-weight: bold;
}
</style><scripttype="text/javascript">function HideAllErrorFields () {
for (var i = 1; i <= 4; i++) {
var field = document.getElementById ("error" + i);
field.style.display = "none";
}
}
function ShowErrorFields (idsStr) {
var ids = idsStr.split (",");
for (var i = 0; i < ids.length; i++) {
var field = document.getElementById ("error" + ids[i]);
if (field) {
field.style.display = "block";
}
}
}
function AjaxSend (form, url, method) {
// hide all error fields
HideAllErrorFields ();
// get message data
var data = GetMessageBody (form); // defined in ajax_form.js
// send the request
var httpRequest = CreateRequestObj (); // defined in ajax_form.js
// try..catch is required if working offline
try {
httpRequest.open (method, url, false); // synchron
httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
httpRequest.send (data);
}
catch (e) {
alert ("Cannot connect to the server!");
return;
}
// handle the response
if (IsRequestSuccessful (httpRequest)) { // defined in ajax_form.js
if (httpRequest.responseText === "ok") { // registration is successful
alert ("Thank you for registering");
/*
// if redirection is required
location.href = "/index.php";
*/
}
else { // some fields are invalid
ShowErrorFields (httpRequest.responseText);
}
}
else {
alert ("An error occurred while registering. Please try it again.");
}
}
</script></head><body>
This is a sample registration form.
The username must be between 2 and 20 characters, the password must be between 6 and 20 characters.
A user named Dottoro is already registered.
<br/>
Try to register both valid and invalid values!
<br/><br/><formonsubmit="AjaxSend (this, 'register.php', 'post'); return false;">
User Name: <inputtype="text"name="userName"/><divclass="error"id="error1">Must be between 2 and 20 characters.</div><divclass="error"id="error2">A user already exists with the same name.</div><br/><br/>
Password: <inputtype="password"name="password"/><divclass="error"id="error3">Must be between 6 and 20 characters.</div><br/><br/>
Repeat Password: <inputtype="password"name="repassword"/><divclass="error"id="error4">Must be the same as the password.</div><br/><br/><inputtype="submit"value="Register"/></form></body>
function CreateRequestObj () {
// although IE supports the XMLHttpRequest object, but it does not work on local files.
var forceActiveX = (window.ActiveXObject && location.protocol === "file:");
if (window.XMLHttpRequest && !forceActiveX) {
returnnewXMLHttpRequest();
}
else {
try {
returnnewActiveXObject("Microsoft.XMLHTTP");
} catch(e) {}
}
}
// create HTTP request body form form data
function GetMessageBody (form) {
var data = "";
for (var i = 0; i < form.elements.length; i++) {
var elem = form.elements[i];
if (elem.name) {
var nodeName = elem.nodeName.toLowerCase ();
var type = elem.type ? elem.type.toLowerCase () : "";
// if an input:checked or input:radio is not checked, skip it
if (nodeName === "input" && (type === "checkbox" || type === "radio")) {
if (!elem.checked) {
continue;
}
}
var param = "";
// select element is special, if no value is specified the text must be sent
if (nodeName === "select") {
for (var j = 0; j < elem.options.length; j++) {
var option = elem.options[j];
if (option.selected) {
var valueAttr = option.getAttributeNode ("value");
var value = (valueAttr && valueAttr.specified) ? option.value : option.text;
if (param != "") {
param += "&";
}
param += encodeURIComponent (elem.name) + "=" + encodeURIComponent (value);
}
}
}
else {
param = encodeURIComponent (elem.name) + "=" + encodeURIComponent (elem.value);
}
if (data != "") {
data += "&";
}
data += param;
}
}
return data;
}
// returns whether the HTTP request was successful
function IsRequestSuccessful (httpRequest) {
// IE: sometimes 1223 instead of 204
var success = (httpRequest.status == 0 ||
(httpRequest.status >= 200 && httpRequest.status < 300) ||
httpRequest.status == 304 || httpRequest.status == 1223);
return success;
}
This example is similar to the previous one, but it uses asynchronous data transfer and displays blinking text while waiting for the server response (the register_delay.php script waits two seconds before responding).
Code
ajax_form.js
register_delay.php
<head><scripttype="text/javascript"src="ajax_form.js"></script><style>.error {
display: none;
color: #a00000;
font-weight: bold;
}
#progress {
visibility: hidden;
color: #00a000;
}
</style><scripttype="text/javascript">function HideAllErrorFields () {
for (var i = 1; i <= 4; i++) {
var field = document.getElementById ("error" + i);
field.style.display = "none";
}
}
function ShowErrorFields (idsStr) {
var ids = idsStr.split (",");
for (var i = 0; i < ids.length; i++) {
var field = document.getElementById ("error" + ids[i]);
if (field) {
field.style.display = "block";
}
}
}
var registering = false;
function OnReadyStateChanged (httpRequest, form) {
if (httpRequest.readyState == 0 || httpRequest.readyState == 4) {
registering = false;
StopAnim ();
// prevent memory leaks
httpRequest.onreadystatechange = null;
if (IsRequestSuccessful (httpRequest)) { // defined in ajax_form.js
if (httpRequest.responseText === "ok") { // registration is successful
alert ("Thank you for registering");
/*
// if redirection is required
location.href = "/index.php";
*/
}
else { // some fields are invalid
ShowErrorFields (httpRequest.responseText);
}
}
else {
alert ("An error occurred while registering. Please try it again.");
}
}
}
function AjaxSend (form, url, method) {
// avoid resend data while registering
if (registering) {
return;
}
// hide all error fields
HideAllErrorFields ();
// get message data
var data = GetMessageBody (form); // defined in ajax_form.js
// send the request
var httpRequest = CreateRequestObj (); // defined in ajax_form.js
// try..catch is required if working offline
try {
httpRequest.open (method, url, true); // asynchron
httpRequest.onreadystatechange = function () {OnReadyStateChanged (httpRequest, form)};
httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
httpRequest.send (data);
}
catch (e) {
alert ("Cannot connect to the server!");
return;
}
registering = true;
StartAnim ();
}
// blinking text
var animTimerId = 0;
function StartAnim () {
var progress = document.getElementById ("progress");
progress.style.visibility = "visible";
animTimerId = setInterval (RegAnim, 100);
}
function RegAnim () {
var progress = document.getElementById ("progress");
progress.style.visibility = (progress.style.visibility == "visible") ? "hidden" : "visible";
}
function StopAnim () {
var progress = document.getElementById ("progress");
progress.style.visibility = "hidden";
clearInterval (animTimerId);
}
</script></head><body>
This is a sample registration form.
The username must be between 2 and 20 characters, the password must be between 6 and 20 characters.
A user named Dottoro is already registered.
<br/>
Try to register both valid and invalid values!
<br/><br/><formonsubmit="AjaxSend (this, 'register_delay.php', 'post'); return false;">
User Name: <inputtype="text"name="userName"/><divclass="error"id="error1">Must be between 2 and 20 characters.</div><divclass="error"id="error2">A user already exists with the same name.</div><br/><br/>
Password: <inputtype="password"name="password"/><divclass="error"id="error3">Must be between 6 and 20 characters.</div><br/><br/>
Repeat Password: <inputtype="password"name="repassword"/><divclass="error"id="error4">Must be the same as the password.</div><br/><br/><inputtype="submit"value="Register"/><divid="progress">Registering</div></form></body>
function CreateRequestObj () {
// although IE supports the XMLHttpRequest object, but it does not work on local files.
var forceActiveX = (window.ActiveXObject && location.protocol === "file:");
if (window.XMLHttpRequest && !forceActiveX) {
returnnewXMLHttpRequest();
}
else {
try {
returnnewActiveXObject("Microsoft.XMLHTTP");
} catch(e) {}
}
}
// create HTTP request body form form data
function GetMessageBody (form) {
var data = "";
for (var i = 0; i < form.elements.length; i++) {
var elem = form.elements[i];
if (elem.name) {
var nodeName = elem.nodeName.toLowerCase ();
var type = elem.type ? elem.type.toLowerCase () : "";
// if an input:checked or input:radio is not checked, skip it
if (nodeName === "input" && (type === "checkbox" || type === "radio")) {
if (!elem.checked) {
continue;
}
}
var param = "";
// select element is special, if no value is specified the text must be sent
if (nodeName === "select") {
for (var j = 0; j < elem.options.length; j++) {
var option = elem.options[j];
if (option.selected) {
var valueAttr = option.getAttributeNode ("value");
var value = (valueAttr && valueAttr.specified) ? option.value : option.text;
if (param != "") {
param += "&";
}
param += encodeURIComponent (elem.name) + "=" + encodeURIComponent (value);
}
}
}
else {
param = encodeURIComponent (elem.name) + "=" + encodeURIComponent (elem.value);
}
if (data != "") {
data += "&";
}
data += param;
}
}
return data;
}
// returns whether the HTTP request was successful
function IsRequestSuccessful (httpRequest) {
// IE: sometimes 1223 instead of 204
var success = (httpRequest.status == 0 ||
(httpRequest.status >= 200 && httpRequest.status < 300) ||
httpRequest.status == 304 || httpRequest.status == 1223);
return success;
}
In some cases, a code snippet needs to be evaluated at runtime.
For example, when the response of an AJAX request contains some source code that needs to be executed by the JavaScript interpreter.
In that case, we can use both the eval method and the Function object to solve the problem.
The prefered solution is to use the Function object, because it is much more faster than the eval method (see eval for details).
This example uses the eval method:
var response = "2+3";
var result = eval (response);
document.write (result); // 5