欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript 学习记录(二)

程序员文章站 2022-06-06 19:01:09
...

字符串

1.可以通过内置属性 length 来获取长度。

2.字符串可以通过字符创建(如:var firstName = "John"),也可以通过对象来创建(如: var firstName = new String("John"))。(不过尽量不要创建 String 对象,因为会拖慢速度,或产生其他副作用(先不管他好了))

3. === 为绝对相等(值相等,对象类型也得相等),如上述 2. 中的两种创建方式 == 返回true,而 === 返回false。

4.关于字符串的一些操作

var x = "JohnJohn";              // x 是字符串
y = x.charAt(2); // h
y = x.charCodeAt(2); // 104
y = x.concat(y, y); // JohnJohn104104, x+y+y
y = x.indexOf('h'); // 2, 索引从0开始
y = x.lastIndexOf('h'); // 6
y = x.slice();
y = x.split('o'); //J,hnJ,hn
y = x.substr(2); // hnJohn
y = x.substring(2,4) // hn,[2,3]
y = x.toLocaleLowerCase(); // johnjohn,小写
y = x.toLocaleUpperCase(); // JOHNJOHN,大写
y = x.toString(); // 转成Stirng
y = x.toUpperCase(); // JOHNJOHN,大写
y = x.trim(); // JohnJohn,去除两端的空格
y = x.valueOf(); // 返回某个字符串对象的原始值

5. + 可以直接连接两字符串,而若是字符串+数字,则会将数字当成字符串来处理。

循环

1. 普通的和 C++ 类似,有 for / while,不过,还可以提供 for/in 对对象的属性进行遍历

var person={fname:"John",lname:"Doe",age:25}; 
for (x in person)  // x 为属性名
{
    txt=txt + person[x];
}

2. JavaScript 标签简单示例:

label:

statements

规则:

continue 语句(带有或不带标签引用)只能用在循环中。

break 语句(不带标签引用),只能用在循环或 switch 中。

通过标签引用,break 语句可用于跳出任何 JavaScript 代码块。

所以,有了标签,就可以在内层循环控制外层循环。

实例:

outerloop:
for (var i = 0; i < 10; i++)
{
    innerloop:
    for (var j = 0; j < 10; j++)
    {
        if (j > 3)
        {
            break;
        }
        if (i == 2)
        {
            break innerloop;
        }
        if (i == 4)
        {
            break outerloop;
        }
        document.write("i=" + i + " j=" + j + "");
    }
}

类型

1. typeof 可以返回类型,如果是null,则返回对象(也就是说,清空对象可以用 null(其实undefined也可以,用 typeof 会在变量没有值的时候返回,任何变量都可以通过这个来清空,null 与 undefined 值相等,类型不同))。

2. 在 JavaScript 中有 5 种不同的数据类型:

  • string
  • number
  • boolean
  • object
  • function

     3 种对象类型:

  • Object
  • Date
  • Array

     2 个不包含任何值的数据类型:

  • null
  • undefined

3. constructor 属性会返回构造函数

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

实例 1:查看对象是不是数组:

function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}

实例 2:查看对象是不是日期:

function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date") > -1;
}

(补充:indexOf是返回字符串在其中的索引,所以其实是利用构造函数同名的特点)

4. 类型转换

全局方法 String() 可以将数字、日期、布尔值转换为字符串。

Number 方法 toString() 也是有同样的效果(转换为字符串)。

其实 Number 还有别的方法,了解一下

方法 描述
toExponential() 把对象的值转换为指数计数法。
toFixed() 把数字转换为字符串,结果的小数点后有指定位数的数字。
toPrecision() 把数字格式化为指定的长度。

Date 方法 toString() 也有相同的效果(转换为字符串)。

其实 Date 还有别的方法,再了解一下

方法 描述
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 日至今的毫秒数。

全局方法 Number() 可以将字符串转换为数字。

Number("3.14")    // 返回 3.14
Number(" ")       // 返回 0 
Number("")        // 返回 0
Number("99 88")   // 返回 NaN

更多方法,盯...

方法 描述
parseFloat() 解析一个字符串,并返回一个浮点数。
parseInt() 解析一个字符串,并返回一个整数。

+ 号也可以转换!

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

关于自动转换想象与现实的落差

5 + null    // 返回 5         null 转换为 0
"5" + null  // 返回"5null"   null 转换为 "null"
"5" + 1     // 返回 "51"      1 转换为 "1"  
"5" - 1     // 返回 4         "5" 转换为 5
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"

正则表达式

0. 何为正则表达式?

正则表达式是由一个字符序列形成的搜索模式。

当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。

正则表达式可以是一个简单的字符,或一个更复杂的模式。

正则表达式可用于所有文本搜索和文本替换的操作。

1.两个方法

在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。

search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

2.示例

var patt = /javascript/i

其中 /javascript/i 是一个正则表达式,javascript是主体(查找/替换的东西),/i 是修饰符,代表搜索不区分大小写

关于修饰符一点点补充

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

3.实例

<p id="demo"></p>
<script>
function myFunction() {
    var str = "learning JavaScript!"; 
    var n = str.search(/javascript/i);
    document.getElementById("demo").innerHTML = n;
}
</script>

4.模式

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

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

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

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

量词

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

5.关于 RegExp 对象(这个暂时没有弄懂)

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

6.闲话

test() 方法是一个正则表达式方法。

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

exec() 方法是一个正则表达式方法。

exec() 方法用于检索字符串中的正则表达式的匹配。

该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。