【JavaScript_1】入门知识、数据类型、运算符

1、var变量赋值不需要强制转换,可以直接进行赋值。 var a=1; a=“hello”;

2、JavaScript的工作方式:先解析代码,获取所有被声明的变量,然后再一行一行地运行。
因此导致所有的变量声明语句都会被提升到代码的头部,这就叫做变量提升。
eg: console.log(a); var a=1;----------->var a;console.log(a);a = 1;(真正运行的顺序)

3、标识符:JavaScript大小写敏感。命名规则:第一个字符($ _ 字母) 第二个字符及以后($ _ 字母 数字)

4、JavaScript可以兼容HTML的注释方法。 也被视为合法的单行注释。–>只有在行首,才会被当成单行注释,否则会当作正常的运算。

5、区块{ }对于var命令不构成单独的作用域。

6、标签(label):JavaScript 语言允许,语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置。
标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句。
标签通常与break语句和continue语句配合使用,跳出特定的循环。格式:break 标签; continue 标签;

7、运算符:typeof可以返回值的数据类型。通常使用在判断语句当中,用来检查数据时候已经被定义,防止报错。
空数组[ ]的类型也是object,这表示在 JavaScript 内部,数组本质上只是一种特殊的对象。这里顺便提一下,instanceof运算符可以区分数组和对象。null返回object。

8、null和undefined的区别:null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。

9、数值范围:JavaScript 能够表示的数值范围为21024到2-1023(开区间),超出这个范围的数无法表示。

10、NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。
NaN不等于任何值,包括它本身。NaN与任何数(包括它自己)的运算,得到的都是NaN。

11、parseInt():parseInt方法用于将字符串转为整数。如果parseInt的参数不是字符串,则会先转为字符串再转换。
字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
所以,parseInt的返回值只有两种可能,要么是一个十进制整数,要么是NaN。
parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。

12、parseFloat方法用于将一个字符串转为浮点数。
isNaN方法可以用来判断一个值是否为NaN。但是,isNaN只对数值有效,如果传入其他值,会被先转成数值。也就是说,isNaN为true的值,有可能不是NaN,而是一个字符串。
isFinite方法返回一个布尔值,表示某个值是否为正常的数值。

13、字符串:长字符串必须分成多行,可以在每一行的尾部使用反斜杠。输出时还是单行输出。
JavaScript 原生提供两个 Base64 相关的方法。

btoa():任意值转为 Base64 编码
atob():Base64 编码转为原来的值
var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"

注意,这两个方法不适合非 ASCII 码的字符,会报错。

btoa(‘你好’) // 报错
要将非 ASCII 码字符转为 Base64 编码,必须中间插入一个转码环节,再使用这两个方法。

14、对象:对象的键名都是字符串,加不加引号都可以,如果键名是数值会自动转成字符串。如果键名不符合标识名的条件,并且不是数字,则必须加上引号。
JavaScript在行首遇到{}时,不清楚是表达式还是代码块,一律解释成代码块。要解释为表达式要在外面加圆括号,因为圆括号里只能是表达式。
读取属性两种方法:点运算符、方括号运算符。如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。obj[‘p’] // “Hello World”
如果使用点运算符,属性就是字符串;如果使用方括号运算符,但是不使用引号,属性就是一个变量。
注意,数值键名不能使用点运算符(因为会被当成小数点)
JavaScript 允许
属性的“后绑定
”,也就是说,你可以在任意时刻新增属性,没必要在定义对象的时候,就定义好属性。并且可以使用点运算符和方括号运算符对属性进行赋值。
查看一个对象本身的所有属性,可以使用Object.keys方法。
delete命令用于删除对象的属性,删除成功后返回true。
in运算符用于检查对象是否包含某个属性,它的左边是一个字符串,表示属性名,右边是一个对象。可以使用对象的hasOwnProperty方法判断一下,是否为对象自身的属性。
for…in循环用来遍历一个对象的全部属性。(参考Java的foreach)
for…in循环有两个使用注意点:
它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。toString属性,默认是“不可遍历”的。
它不仅遍历对象自身的属性,还遍历继承的属性。

with语句的格式如下:
with (对象) {
语句;
}
它的作用是操作同一个对象的多个属性时,提供一些书写的方便。

with (document.links[0]){
  console.log(href);
  console.log(title);
  console.log(style);
}
// 等同于
console.log(document.links[0].href);
console.log(document.links[0].title);
console.log(document.links[0].style);

15、函数:使用function声明函数。函数与其他数据类型地位平等,所以在 JavaScript 语言中又称函数为第一等公民。同时具有变量提升的特性。
常用属性:name、length、toString
arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,以此类推。这个对象只有在函数体内部,才可以使用。
虽然arguments很像数组,但它是一个对象。数组专有的方法(比如slice和forEach),不能在arguments对象上直接使用。
如果要让arguments对象使用数组方法,真正的解决方法是将arguments转为真正的数组。下面是两种常用的转换方法:slice方法和逐一填入新数组。
var args = Array.prototype.slice.call(arguments); //slice转换
arguments对象带有一个callee属性,返回它所对应的原函数。
闭包的实现:函数内嵌套函数,封装,内存消耗较大,不建议滥用。

16、数组:数组的本质是一种特殊的对象。数组的length可以动态变化。
只要有length属性,就可以认为这个对象类似于数组。但是有一个问题,这种length属性不是动态值,不会随着成员的变化而变化。
“类似数组的对象”还有一个办法可以使用数组的方法,就是通过call()把数组的方法放到对象上面。

function print(value, index) {
  console.log(index + ' : ' + value);
}

Array.prototype.forEach.call(arrayLike, print);

上面代码中,arrayLike代表一个类似数组的对象,本来是不可以使用数组的forEach()方法的,但是通过call(),可以把forEach()嫁接到arrayLike上面调用。

// forEach 方法
function logArgs() {
  Array.prototype.forEach.call(arguments, function (elem, i) {
    console.log(i + '. ' + elem);
  });
}

17、运算符
指数运算符是右结合,而不是左结合。即多个指数运算符连用时,先进行最右边的计算。

// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512

你可能感兴趣的:(JavaScript,javascript,开发语言,ecmascript)