Js-w3school(2020.2.1)【js数据类型、js函数】

…衆ロ難τιáo~ 提交于 2020-02-02 05:57:33

六、js数据类型
1.JavaScript 变量能够保存多种数据类型:数值、字符串值、数组、对象等等:

var length = 7;                             // 数字
var lastName = "Gates";                      // 字符串
var cars = ["Porsche", "Volvo", "BMW"];         // 数组
var x = {firstName:"Bill", lastName:"Gates"};    // 对象 
  1. JavaScript 拥有动态类型。这意味着相同变量可用作不同类型
  2. JavaScript 字符串值
    字符串(或文本字符串)是一串字符(比如 “Bill Gates”)。字符串被引号包围。您可使用单引号或双引号
  3. JavaScript 只有一种数值类型。写数值时用不用小数点均可
    超大或超小的数值可以用科学计数法来写
var y = 123e5;      // 12300000
var z = 123e-5;     // 0.00123
  1. 布尔值只有两个值:true 或 false
  2. JavaScript 数组用方括号书写。数组的项目由逗号分隔。
var cars = ["Porsche", "Volvo", "BMW"];
  1. JavaScript 对象用花括号来书写。对象属性是 name:value 对,由逗号分隔
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
  1. Undefined 与 null 的值相等,但类型不相等:
typeof undefined              // undefined
typeof null                   // object
null === undefined            // false
null == undefined             // true
  1. typeof
typeof "Bill"              // 返回 "string"
typeof 3.14                // 返回 "number"
typeof true                // 返回 "boolean"
typeof false               // 返回 "boolean"
typeof x                   // 返回 "undefined" (假如 x 没有值)
typeof {name:'Bill', age:62} // 返回 "object"
typeof [1,2,3,4]             // 返回 "object" (并非 "array",typeof 运算符把数组返回为 "object",因为在 JavaScript 中数组即对象。
typeof null                  // 返回 "object"
typeof function myFunc(){}   // 返回 "function"

10.字符字面量
在这里插入图片描述
11.类型转换
转换成字符串: toString() 方法
转换成数字: parseInt() 和 parseFloat()
12. toString()
Boolean 类型的 toString() 方法只是输出 “true” 或 “false”,结果由变量的值决定
Number 类型的 toString() 方法比较特殊,它有两种模式,即默认模式和基模式。采用默认模式,toString() 方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学计数法)基只是要转换成的基数的另一种加法而已,它是 toString() 方法的参数:

var iNum = 10;
alert(iNum.toString(2));	//输出 "1010"
alert(iNum.toString(8));	//输出 "12"
alert(iNum.toString(16));	//输出 "A"
  1. parseInt()
var iNum1 = parseInt("12345red");	//返回 12345
var iNum1 = parseInt("0xA");	//返回 10
var iNum1 = parseInt("56.9");	//返回 56
var iNum1 = parseInt("red");	//返回 NaN

其他进制

var iNum1 = parseInt("AF", 16);	//返回 175
var iNum1 = parseInt("10", 2);	//返回 2
var iNum2 = parseInt("10", 8);	//返回 8
var iNum3 = parseInt("10", 10);	//返回 10
  1. parseFloat()
var fNum1 = parseFloat("12345red");	//返回 12345
var fNum2 = parseFloat("0xA");	//返回 NaN
var fNum3 = parseFloat("11.2");	//返回 11.2
var fNum4 = parseFloat("11.22.33");	//返回 11.22
var fNum5 = parseFloat("0102");	//返回 102
var fNum1 = parseFloat("red");	//返回 NaN

15.强制类型转换
Boolean(value) - 把给定的值转换成 Boolean 型;
Number(value) - 把给定的值转换成数字(可以是整数或浮点数);
String(value) - 把给定的值转换成字符串;
16.引用类型
引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象
对象是由 new 运算符加上要实例化的对象的名字创建的。例如,下面的代码创建 Object 对象的实例:var o = new Object();//当没有参数,括号可以省略
17.Boolean 对象
Boolean 对象是 Boolean 原始类型的引用类型。
要创建 Boolean 对象,只需要传递 Boolean 值作为参数

var oBooleanObject = new Boolean(true);
var oBooleanObject = new Boolean(false);

这两种oBooleanObject都是默认true
18.Number对象
正如你可能想到的,Number 对象是 Number 原始类型的引用类型。要创建 Number 对象,采用下列代码:

var oNumberObject = new Number(68);

(1)取值:要得到数字对象的 Number 原始值,只需要使用 valueOf() 方法:

var iNumber = oNumberObject.valueOf();

(2)小数位数:toFixed() 方法返回的是具有指定位数小数的数字的字符串表示。例如:

var oNumberObject = new Number(68);
alert(oNumberObject.toFixed(2));  //输出 "68.00"

(3)科学计数法:与格式化数字相关的另一个方法是 toExponential(),它返回的是用科学计数法表示的数字的字符串形式。与 toFixed() 方法相似,toExponential() 方法也有一个参数,指定要输出的小数的位数。例如:

var oNumberObject = new Number(68);
alert(oNumberObject.toExponential(1));  //输出 "6.8e+1"

(4)有效位数:toPrecision() 方法根据最有意义的形式来返回数字的预定形式或指数形式。它有一个参数,即用于表示数的数字总数(不包括指数)。例如,

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(1));  //输出 "7e+1"

这段代码的任务是用一位数字表示数字 68,结果为 “7e+1”,以另外的形式表示即 70。的确,toPrecision() 方法会对数进行舍入。不过,如果用 2 位数字表示 68,就容易多了:

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(2));  //输出 "68"

当然,输出的是 “68”,因为这正是该数的准确表示。不过,如果指定的位数多于需要的位数又如何呢?

var oNumberObject = new Number(68);
alert(oNumberObject.toPrecision(3));  //输出 "68.0"

在这种情况下,toPrecision(3) 等价于 toFixed(1),输出的是 “68.0”。
19. String 对象
String 对象是 String 原始类型的对象表示法,它是以下方式创建的:

var oStringObject = new String("hello world");

(1)取值:String 对象的 valueOf() 方法和 toString() 方法都会返回 String 类型的原始值:

alert(oStringObject.valueOf() == oStringObject.toString());	//输出 "true"

(2)字符个数:String 对象具有属性 length,它是字符串中的字符个数:

var oStringObject = new String("hello world");
alert(oStringObject.length);	//输出 "11"

(3)获取单个字符:charAt() 方法返回的是包含指定位置处的字符的字符串:

var oStringObject = new String("hello world");
alert(oStringObject.charAt(1));	//输出 "e"

(4)获取单个字符的代码:可以调用 charCodeAt() 方法:

var oStringObject = new String("hello world");
alert(oStringObject.charCodeAt(1));	//输出 "101"

(5)连接字符串,不改变原来:接下来是 concat() 方法,用于把一个或多个字符串连接到 String 对象的原始值上。该方法返回的是 String 原始值,保持原始的 String 对象不变:

var oStringObject = new String("hello ");
var sResult = oStringObject.concat("world");
alert(sResult);		//输出 "hello world"
alert(oStringObject);	//输出 "hello "

(6)得到字符索引:这两个方法的不同之处在于,indexOf() 方法是从字符串的开头(位置 0)开始检索字符串,而 lastIndexOf() 方法则是从字符串的结尾开始检索子串。例如:

var oStringObject = new String("hello world!");
alert(oStringObject.indexOf("o"));		输出 "4"
alert(oStringObject.lastIndexOf("o"));	输出 "7"

(7)字符串比较大小:下一个方法是 localeCompare(),对字符串进行排序。该方法有一个参数 - 要进行比较的字符串,返回的是下列三个值之一:
• 如果 String 对象按照字母顺序排在参数中的字符串之前,返回负数。
• 如果 String 对象等于参数中的字符串,返回 0
• 如果 String 对象按照字母顺序排在参数中的字符串之后,返回正数。
注释:如果返回负数,那么最常见的是 -1,不过真正返回的是由实现决定的。如果返回正数,那么同样的,最常见的是 1,不过真正返回的是由实现决定的。
示例如下:

var oStringObject = new String("yellow");
alert(oStringObject.localeCompare("brick"));		//输出 "1"
alert(oStringObject.localeCompare("yellow"));		//输出 "0"
alert(oStringObject.localeCompare("zoo"));		//输出 "-1"

(8)切片,不改变原来:与 concat() 方法一样,slice() 和 substring() 方法都不改变 String 对象自身的值。它们只返回原始的 String 值,保持 String 对象不变。

var oStringObject = new String("hello world");
alert(oStringObject.slice("3"));		//输出 "lo world"
alert(oStringObject.substring("3"));		//输出 "lo world"
alert(oStringObject.slice("3", "7"));		//输出 "lo w"
alert(oStringObject.substring("3", "7"));	//输出 "lo w"

对于负数参数,slice() 方法会用字符串的长度加上参数,substring() 方法则将其作为 0 处理(也就是说将忽略它)。例如:

var oStringObject = new String("hello world");
alert(oStringObject.slice("-3"));		//输出 "rld"
alert(oStringObject.substring("-3"));	//输出 "hello world"
alert(oStringObject.slice("3, -4"));		//输出 "lo w"
alert(oStringObject.substring("3, -4"));	//输出 "hel"

(9)大小写转换:有 4 种方法用于执行大小写转换,即
• toLowerCase()
• toLocaleLowerCase()
• toUpperCase()
• toLocaleUpperCase()

(10)是否存在:instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。例如:

var oStringObject = new String("hello world");
alert(oStringObject instanceof String);	//输出 "true"

七、js函数
1.JavaScript 函数是被设计为执行特定任务的代码块。JavaScript 函数会在某代码调用它时被执行。
2. JavaScript 函数通过 function 关键词进行定义,其后是函数名和括号 ()。函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)。圆括号可包括由逗号分隔的参数

function name(参数 1, 参数 2, 参数 3) {
    要执行的代码
}

3.函数中的代码将在其他代码调用该函数时执行:
• 当事件发生时(当用户点击按钮时)
• 当 JavaScript 代码调用时
• 自动的(自调用)
4. 函数名 引用的是函数对象,而 函数名() 引用的是函数结果。
5. arguments 对象
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。因此,无需明确命名参数,就可以重写函数:

function sayHi() {
  if (arguments[0] == "bye") {
    return;
  }

  alert(arguments[0]);
}

6.Function 类可以表示开发者定义的任何函数。
用 Function 类直接创建函数的语法如下:

var function_name = new function(arg1, arg2, ..., argN, function_body)
  1. ECMAScript 定义的function属性 length 声明了函数期望的参数个数。
  2. ECMAScript 最易让人误解的一点是,它支持闭包(closure)。
    闭包,指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使用函数之外定义的变量。
    在 ECMAScript 中使用全局变量是一个简单的闭包实例。请思考下面这段代码:
var sMessage = "hello world";
function sayHelloWorld() {
  alert(sMessage);
}
sayHelloWorld();

在上面这段代码中,脚本被载入内存后,并没有为函数 sayHelloWorld() 计算变量 sMessage 的值。该函数捕获 sMessage 的值只是为了以后的使用,也就是说,解释程序知道在调用该函数时要检查 sMessage 的值。sMessage 将在函数调用 sayHelloWorld() 时(最后一行)被赋值,显示消息 “hello world”。
注意:就像使用任何高级函数一样,使用闭包要小心,因为它们可能会变得非常复杂。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!