JavaScript-3-菜鸟教程

typeof, null, 和 undefined

typeof 操作符:检测变量的数据类型

在 JavaScript 中 null 表示 “什么都没有”
在 JavaScript 中, undefined 是一个没有设置值的变量

注意:用 typeof 检测 null 返回是object

可以使用null和undefined清空对象

    <p>对象可以通过设置为 <b>nullb> 来清空。p>
    <script>
        var person = { firstName: "John", lastName: "Doe", age: 50, eyeColor: "blue" };
        var person = null;	// 值为 null(空), 但类型为对象
        document.write(typeof person);
    script>

object

    <p>对象可以设置为 <b>undefinedb> 来清空。p>
    <script>
        var person = { firstName: "John", lastName: "Doe", age: 50, eyeColor: "blue" };
        var person = undefined;	// 值为 undefined, 类型为 undefined
        document.write(typeof person);
    script>

undefined

    <p>变量的值如果不存在则该变量值为 <b>undefinedb>p>
    <p id="demo">p>
    <script>
        var person;	// 值为 undefined(空), 类型是undefined
        document.getElementById("demo").innerHTML = person + "
"
+ typeof person;
script>

undefined
undefined

null 和 undefined 的值相等,但类型不等

typeof undefined             // undefined
typeof null                  // object
null === undefined           // false
null == undefined            // true

类型转换

数据类型

Number() 转换为数字, String() 转换为字符串, Boolean() 转换为布尔值。

数据类型(6种):string number boolean object function symbol
对象类型(3种): Object Date Array
不包含任何值的数据类型(2种): null undefined

typeof

typeof NaN                    // 返回 number
typeof [1,2,3,4]              // 返回 object
typeof {name:'John', age:34}  // 返回 object
typeof new Date()             // 返回 object
typeof function () {}         // 返回 function
typeof myCar                  // 返回 undefined (如果 myCar 没有声明)

constructor 属性

constructor 属性返回所有 JavaScript 变量的构造函数

"John".constructor                 // function String()  { [native code] }  
(3.14).constructor                 // function Number()  { [native code] }  
false.constructor                  // function Boolean() { [native code] }  
[1,2,3,4].constructor              // function Array()   { [native code] }  
{name:'John', age:34}.constructor  // function Object()  { [native code] }  
new Date().constructor             // function Date()    { [native code] }  
function () {}.constructor         // function Function(){ [native code] }  

使用 constructor 属性来查看对象是否为数组 (包含字符串 “Array”):

    <p>判断是否为数组。p>
    <p id="demo">p>       
    <script>
        var fruits = ["Banana", "Orange", "Apple", "Mango"];
        document.getElementById("demo").innerHTML = isArray(fruits);
        function isArray(myArray) {
            return myArray.constructor.toString().indexOf("Array") > -1;
        }
    script>
    <script>
        var fruits = ["Banana", "Orange", "Apple", "Mango"];
        document.write(fruits.constructor)  // function Array() { [native code] }
        // toString() 把数字转换为字符串
        document.write(fruits.constructor.toString()) // function Array() { [native code] }
        // indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
        // 如果没有找到匹配的字符串则返回 -1。
        document.write(fruits.constructor.toString().indexOf("Array"))  // 9
    script>

使用 constructor 属性来查看对象是否为日期 (包含字符串 “Date”)

    <p>判断是否为日期。p>
    <p id="demo">p>    
    <script>
        var myDate = new Date();
        document.getElementById("demo").innerHTML = isDate(myDate);
        function isDate(myDate) {
            return myDate.constructor.toString().indexOf("Date") > -1;
        }
        document.write(myDate.constructor.toS/tring().indexOf('Date'))   // 9
    script>

JavaScript 类型转换

JavaScript 变量可以转换为新变量或其他数据类型:

  • 通过使用 JavaScript 函数
  • 通过 JavaScript 自身自动转换

将数字转换为字符串

  • 全局方法 String()
String(123)       // 将数字 123 转换为字符串并返回  // 123
String(100 + 23)  // 将数字表达式转换为字符串并返回  // 123
  • Number 方法 toString()
(123).toString()
(100 + 23).toString()
方法 描述
toExponential() 把对象的值转换为指数计数法。
toFixed() 把数字转换为字符串,结果的小数点后有指定位数的数字。
toPrecision() 把数字格式化为指定的长度。

将布尔值转换为字符串

String(false)        // 返回 "false"
String(true)         // 返回 "true"
false.toString()     // 返回 "false"
true.toString()      // 返回 "true"

将日期转换为字符串

Date() 返回字符串

Date()      // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)
String(new Date())      // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)

obj = new Date()
obj.toString()   // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)
方法 描述
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getFullYear() 从 Date 对象以四位数字返回年份。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。

将字符串转换为数字

空字符串转换为 0
其他的字符串会转换为 NaN (不是个数字)

Number("3.14")    // 返回 3.14
Number(" ")       // 返回 0
Number("")        // 返回 0
Number("99 88")   // 返回 NaN
方法 描述
parseFloat() 解析一个字符串,并返回一个浮点数。
parseInt() 解析一个字符串,并返回一个整数。

一元运算符 +

Operator + 可用于将变量转换为数字
如果变量不能转换,它仍然会是一个数字,但值为 NaN (不是一个数字)

var y = "5";      // y 是一个字符串
var x = + y;      // x 是一个数字	// 此时 x = 5

var y = "John";   // y 是一个字符串
var x = + y;      // x 是一个数字 (NaN)

将布尔值转换为数字

Number(false)     // 返回 0
Number(true)      // 返回 1

将日期转换为数字

<script>
    var d = new Date();
    document.write(d + '
'
) document.write(Number(d) + '
'
) document.write(d.getTime()) // Fri Oct 27 2023 17:26:07 GMT+0800 (中国标准时间) // 1698398767499 // 1698398767499
script>

自动转换类型

当 JavaScript 尝试操作一个 “错误” 的数据类型时,会自动转换为 “正确” 的数据类型

5 + null    // 返回 5         	null 转换为 0
"5" + null  // 返回"5null"		null 转换为 "null"
"5" + 1     // 返回 "51"      	1 转换为 "1" 
"5" - 1     // 返回 4         	"5" 转换为 5

自动转换为字符串

当你尝试输出一个对象或一个变量时 JavaScript 会自动调用变量的 toString() 方法

document.getElementById("demo").innerHTML = myVar;

myVar = {name:"Fjohn"}  // toString 转换为 "[object Object]"
myVar = [1,2,3,4]       // toString 转换为 "1,2,3,4"
myVar = new Date()      // toString 转换为 "Fri Jul 18 2014 09:08:55 GMT+0200"

// 数字和布尔值也经常相互转换
myVar = 123             // toString 转换为 "123"
myVar = true            // toString 转换为 "true"
myVar = false           // toString 转换为 "false"

将原始值使用Number() String() Boolean() 转为相应的值

原始值 转换为数字 转换为字符串 转换为布尔值
false 0 “false” false
true 1 “true” true
0 0 “0” false
1 1 “1” true
“0” 0 “0” true
“000” 0 “000” true
“1” 1 “1” true
NaN NaN “NaN” false
Infinity Infinity “Infinity” true
-Infinity -Infinity “-Infinity” true
“” 0 “” false
“20” 20 “20” true
“Runoob” NaN “Runoob” true
[ ] 0 “” true
[20] 20 “20” true
[10,20] NaN “10,20” true
[“Runoob”] NaN “Runoob” true
[“Runoob”,“Google”] NaN “Runoob,Google” true
function(){} NaN “function(){}” true
{ } NaN “[object Object]” true
null 0 “null” false
undefined NaN “undefined” false

正则表达式

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

搜索模式可用于文本搜索和文本替换。

语法:
/正则表达式主体/修饰符(可选)
eg:var patt = /runoob/i
解释:
/runoob/i 是一个正则表达式。
runoob 是一个正则表达式主体 (用于检索)。
i 是一个修饰符 (搜索不区分大小写)。

search

检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置

    <p>搜索字符串 "runoob", 并显示匹配的起始位置:p>
    <button onclick="myFunction()">点我button>
    <p id="demo">p>
    <script>
        function myFunction() {
            var str = "Visit Runoob!";
            // var n = str.search(/Runoob/i);
            var n = str.search("Runoob");
            document.getElementById("demo").innerHTML = n;
        }
    script>

6

replace

在字符串中用一些字符串替换另一些字符串,或替换一个与正则表达式匹配的子串

<script>
    var str = 'Visit Microsoft!'
    // var txt = str.replace(/microsoft/i, "Runoob");
    var txt = str.replace("Microsoft","Runoob");
    document.write(txt)
script>

Visit Runoob!

修饰符

修饰符 可以在全局搜索中不区分大小写

修饰符 描述
i 执行对大小写不敏感的匹配
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m 执行多行匹配

模式

方括号用于查找某个范围内的字符

表达式 描述
[abc] 查找方括号之间的任何字符
[0-9] 查找任何从 0 至 9 的数字
(x|y) 查找任何以 | 分隔的选项

元字符是拥有特殊含义的字符

元字符 描述
\d 查找数字
\s 查找空白字符
\b 匹配单词边界
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符

量词

量词 描述
n+ 匹配任何包含至少一个 n 的字符串
n* 匹配任何包含零个或多个 n 的字符串
n? 匹配任何包含零个或一个 n 的字符串

RegExp 对象

RegExp 对象是一个预定义了属性和方法的正则表达式对象

test()

test() 方法是一个正则表达式方法
用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false

    <script>
        // var patt1 = new RegExp("e");
        // document.write(patt1.test("The best things in life are free"));
        
        // 两行合并为一行
        document.write(/e/.test("The best things in life are free!"))
    script>

true

exec()

检索字符串中的正则表达式的匹配
返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null

    <script>
        var patt1 = new RegExp("e");
        document.write(patt1.exec("The best things in life are free"));
        document.write(' ')
        document.write(/the/.exec("The best things in life are free"));
    script>

e null

你可能感兴趣的:(javascript)