JavaScript基础笔记1 (数据类型)

JavaScript 是一种解释型脚本语言,和python比较类似(逐行解释代码,遇到语法错误程序停止),和html的文本标识语言不一样。

也有人说JavaScript是和C语言类似的编译型语言?用编译器将代码转化为低级语言之后执行。但是官方说法是JavaScript是解释型语言,浏览器中有JavaScript的解释器,也叫JavaScript引擎。

无论是编译型还是解释性语言,比较现实的一点是:如果js代码中有语法错误,就像C语言一样编译错误,就会无法运行。有时代码中有一个格式小错误,导致整个代码功能无法实现,就像文件和浏览器坏掉一样。

按F12打开浏览器的控制台,Sources里可以找到你的html文件和js文件,单独把js文件提出来可以在浏览器里调试。

按Esc可以打开命令行,可以直接在命令行里交互式地敲js代码。

定义变量:

JavaScript和C语言不同的一点是变量类型转换很自由,这是优点也是缺点,优点是不需要关注太多细节,缺点是会比较混乱,你可以用typeof+变量来查看变量的类型。

由于每个变量的类型是可以变化的,因此没有用char或int这样的关键词来定义变量。

JavaScript定义变量的关键词只有三个:var,let,const。

const好理解,和C语言一样,定义一个之后无法修改的变量,类型和值都是固定的。

let和var相比有三点不同:

1:let不允许变量重复声明,var可以,当var定义重复变量名时,返回值为未超出作用域的最后一个。

//eg: var a = 1; function space(){ var a = 2; console.log(a); //2 a = 3; console.log(a); //3 } space(); console.log(a); //1 //此代码中作用域以函数为边界。

2:var声明的变量会进行变量提升,let不会进行变量提升。(变量提升:把作用域内的定义语句提到作用域最前面)

3:var声明的全局变量会绑定到顶级对象上(浏览器会绑定到window上,node.js会绑定到global上),let不绑定。


其实,JavaScript的变量可以不声明直接使用,如果不使用var、let或const关键字而直接出现一个新变量,该变量将被隐式声明为全局变量。这意味着在任何地方都可以访问该变量,可能会影响到代码的其他部分,所以不推荐此做法。

输入输出:

初学JavaScript为了调试自己的想法和所学的知识,与计算机进行输入输出的交互是必要的。

三个函数:

prompt(); //相当于输入,在浏览器里打开一个对话框,可以返回你输入的字符串。 //当用户输入为数字或布尔类型时,一律返回string型,若想使类型不变,则需要进行类型转换。 //值得一提的是,在调用 prompt() 时,将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句。 input = prompt("input what you want:"); //括号内放一个字符串会在对话框中作为问题显示。 input = prompt("input what you want:","qwq"); //括号内放第二个字符串会把第二个字符串作为默认答案。 res = Boolean(prompt("true or false?")); //可以将你输入的字符串true转化为Boolean类型 res = Number(prompt("What's your age?")); //转化为数字。(Number和Boolean关键词首字母都是大写的)
console.log(); //在命令行里输出。 //按Esc显示命令行,可以看到程序运行结果。 //由于prompt和alert函数会打开网页的对话框,因此将暂停JavaScript代码的执行,因此命令行的输出结果会分段显示出来。
alert(); //将想要输出的结果放入括号,与console.log()不同的是它会把输出内容放入页面对话框,显示这个是来自某某网页的信息,然后点一下就消失了。 //因为点一下就消失,而且每次只能输出一项内容,所以代码中有多个想要输出的内容用console.log()更方便些。

一个特性:JavaScript每一个语句加分号是好习惯,如果不加,代码也会默认在每行的行尾加上一个分号。

数据类型:

Number:

//字面量: 123456789, +1234, -1234, 0b1010101, 0o1234567123, 0x1236789abcdef, 3.1415, 1e100, 1e-4, 100000000000000000000000000000000000000000000000000000000000Infinity, NaN, //(C语言中八进制字面量不加o,js需要加o,js中也可以直接写作01234567, // 但这个写法有歧义,如果数字中有8或9,解释器会把前面的0当前导零处理) //浮点数也当做number处理了,js整数除法运算不会自动下取整,出现分数就以浮点数形式存储。 //js中Number的位数好像可以长到犯规,js会把特别大的数自动当做浮点数处理,爆long long的说法是不存在了。 //两个特殊数值:Infinity, NaN 使用typeof也会返回number //关于两个特殊数值的有趣运算: console.log(1/0); // Infinity console.log(Infinity/1000000); // Infinity console.log(Infinity ** 0); // 1 console.log(Infinity / 0); // Infinity (无穷大除以零还是无穷大) console.log(Infinity-Infinity); // NaN console.log(Infinity/Infinity); // NaN console.log(1/Infinity); // 0 console.log(NaN+Infinity); // NaN //由此可见,Infinity和数学中的无限大运算方式一致,当遇到无法计算准确值的时候,会返回NaN类型,C++似乎把Infinity也归类为NaN了。 //NaN由于无精确值,几乎所有与其的Number类型运算都会返回NaN,但是也有一个例外:任何Number的0次幂都是1。 console.log(NaN ** 0); // 1 //未定义运算会返回NaN,因此字符串乘除或减一个number也会得到NaN console.log("qwq" / 2); // NaN console.log("qwq" + 2); // qwq2 console.log(NaN + "qwq"); // NaNqwq (这是把NaN转化成字符串了) console.log("4" / 3); // 1.333333 (乘除减运算会把字符串变Number,如果变化失败则为NaN) console.log("4" + 2); // 42 (加法一律变string) console.log("Infinity" / 2); // Infinity console.log("infinity" / 2); // NaN (区分大小写) //类型转化: Number("4.5"); // 4.5 Number("4.5.6"); // NaN Number("1+2"); // NaN (如果是String类型的转化应当是只能认清字面量,无法在引号中进行计算)

BigInt:

JavaScript中大于253的数值会有精度问题,想要计算高精度的数字就不能使用Number类型。

//字面量: 12345678912345678912345678n, //BigInt的字面量只有一种:大整数后面加一个n。 let qwq = 1234n; let qwq = BigInt(true); let qwq = BigInt(1234); let qwq = BigInt("1234"); //字面量表示,和Boolean,Number,String类型的转化 //其中要注意number类型转化时有精度误差: let qwq = BigInt(1000000000000000000000000000000000000000000000); console.log(qwq); //999999999999999929757289024535551219930759168n let num = Number(qwq); console.log(num); //1e45 //计算: console.log(1234n + 2); // 会报错,大整数只能加大整数 console.log(2n > 1); //true 但是比较的话,大整数可以和Number比 console.log(1n == 1); //true 可以认为与Number类型一级相等 console.log(1234n + 1234n); //2468n 输出值仍为大整数字面量,也就是说末尾带n console.log(5n / 2n); //2 大整数和Number类型不同,由于是类int整数运算所以下取整 //转化为Boolean类型时,除0n以外一律为true

String:

//三种表示方法: let str1 = "String1"; let str2 = 'String2'; let str3 = `you can add ${str1} and ${str2}`; //${}不仅能套字符串,合法的运算都可以放入,最后返回值转化为String类 let str4 = `${1+2}`; console.log("qwq1234" + 3); // qwq12343 console.log("qwq1234" - 4); // NaN (字符串运算只有加,没有乘除减,会默认变为NaN) console.log("qwq"-"q"); // NaN (未定义的String运算也会变成NaN,但是此处的NaN不是String类型,依旧是number类型) console.log("qwq"-"q"+"QAQ"); // NaNQAQ 有趣呐。。。从左到右算 let str5 = `line1 line2 line3`; let str6 = "line1\nline2\nline3"; //用``来表示字符串甚至支持中间换行 //特殊字符: \n //一般换行 \r //非windows系统中的换行,windows中写作\r\n \` \' \" \\ //就是本人 \t //制表符 \b, \f, \v //退格,换页,垂直标签 \x** //Unicode 字符 \u**** //UTF-16 编码 \u{X…XXXXXX} //UTF-32 编码 \u在失配时会报错

Boolean:

//Boolean类型有两个字面量,也是所有的取值: true, false, //做比较和逻辑运算时返回值一律为Boolean类型

null

null, //是个字面量 let wo = null; console.log(wo); //null console.log(wo+wo); //0 console.log(wo*123); //0 console.log(wo+123); //123 神奇的运算,似乎在Number运算下会自动转化成0 console.log(wo || 123); //123 在逻辑运算下为false console.log(typeof wo); //object 这是官方承认的一个错误qwq,我们不把null理解成对象类型

undefined:

undefined, //也是个字面量 let wo = undefined; console.log(typeof wo); //undefined 与null一样,都是自成一种类型 let wo; console.log(wo); //undefined 未赋值即为undefined console.log(Number(undefined)); //NaN undefined转化为Number就是NaN console.log(Number(null)); //0 null转化为Number是0

Object:

对象类型,除此类型之外所有类型都称为原始类型。对象类型类似与结构体。

Symbol:

类型用于创建对象的唯一标识符, 也算一种原始数据类型。


除了上述八种数据类型,typeof 还可以有另一个结果,叫function,自定义的函数和原有的alert等函数都是function。

typeof Number; //function 有趣的是Number也算function,因为Number()是转化类型的函数 typeof Number(); //number 与上一个不同,这个是返回值的type typeof console; //object typeof console.log; //function

__EOF__

本文作者枫叶晴
本文链接https://www.cnblogs.com/maple276/p/17574599.html
关于博主:菜菜菜
版权声明:呃呃呃
声援博主:呐呐呐
posted @   maple276  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示